diff --git a/.clang-tidy b/.clang-tidy index 25fbff9f1a4d..b0f28e29b7c3 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -17,45 +17,33 @@ # The checks defined here will be run and will display by default as warnings. Checks: > - -*, cppcoreguidelines-c-copy-assignment-signature, - cppcoreguidelines-interfaces-global-init, cppcoreguidelines-no-malloc, - cppcoreguidelines-pro-bounds-constant-array-index, cppcoreguidelines-pro-type-const-cast, - cppcoreguidelines-pro-type-cstyle-cast, cppcoreguidelines-pro-type-member-init, - cppcoreguidelines-pro-type-static-cast-downcast, cppcoreguidelines-pro-type-union-access, - cppcoreguidelines-pro-type-vararg, cppcoreguidelines-slicing, - cppcoreguidelines-special-member-functions, clang-analyzer-security.FloatLoopCounter, - clang-analyzer-security.insecureAPI.*, clang-analyzer-core.CallAndMessage, - clang-analyzer-core.DivideZero, clang-analyzer-core.DynamicTypePropagation, - clang-analyzer-core.NonNullParamChecker, clang-analyzer-core.NullDereference, - clang-analyzer-core.StackAddressEscape, clang-analyzer-core.UndefinedBinaryOperatorResult, - clang-analyzer-core.VLASize, clang-analyzer-core.builtin.BuiltinFunctions, - clang-analyzer-core.builtin.NoReturnFunctions, clang-analyzer-core.uninitialized.ArraySubscript, - clang-analyzer-core.uninitialized.Assign, clang-analyzer-core.uninitialized.Branch, - clang-analyzer-core.uninitialized.CapturedBlockVariable, - clang-analyzer-core.uninitialized.UndefReturn, clang-analyzer-cplusplus.NewDelete, - clang-analyzer-cplusplus.NewDeleteLeaks, clang-analyzer-cplusplus.SelfAssignment, - clang-analyzer-deadcode.DeadStores, modernize-avoid-bind, modernize-deprecated-headers, - modernize-loop-convert, modernize-make-shared, modernize-pass-by-value, + -*, cppcoreguidelines-* clang-analyzer-*, modernize-*, + performance-faster-string-find, performance-for-range-copy, + performance-implicit-conversion-in-loop, performance-inefficient-algorithm, + performance-inefficient-string-concatenation, performance-trivially-destructible, + performance-inefficient-vector-operation, performance-move-const-arg, + performance-move-constructor-init, performance-noexcept-move-constructor, + performance-no-automatic-move, performance-unnecessary-copy-initialization, + performance-type-promotion-in-math-fn + +# performance checks not enabled due to segmentation fault in clang-tidy v8+: +# performance-unnecessary-value-param + +# In order to trigger an error, you must have a rule defined both in checks and in this section. +WarningsAsErrors: > + cppcoreguidelines-no-malloc, modernize-deprecated-headers, + modernize-loop-convert, modernize-make-shared, modernize-pass-by-value, modernize-make-unique, modernize-raw-string-literal, modernize-redundant-void-arg, modernize-replace-auto-ptr, modernize-replace-random-shuffle, modernize-return-braced-init-list, modernize-shrink-to-fit, modernize-unary-static-assert, modernize-use-bool-literals, modernize-use-default-member-init, modernize-use-emplace, modernize-use-equals-default, modernize-use-equals-delete, modernize-use-noexcept, modernize-use-nullptr, modernize-use-override, - modernize-use-transparent-functors, modernize-use-using, performance-* + modernize-use-transparent-functors, modernize-use-using, + performance-unnecessary-copy-initialization, performance-move-const-arg -# cppcoreguidelines checks not enabled: -# cppcoreguidelines-pro-bounds-pointer-arithmetic -# cppcoreguidelines-pro-bounds-array-to-pointer-decay -# cppcoreguidelines-pro-type-reinterpret-cast - -# modernize checks not enabled: +# modernize checks not enforced: # modernize-use-auto -# modernize-make-unique (C++14 and newer only) - -# In order to trigger an error, you must have a rule defined both in checks and in this section. -WarningsAsErrors: > - cppcoreguidelines-no-malloc, modernize-use-nullptr, performance-unnecessary-copy-initialization, - modernize-use-emplace, performance-move-const-arg +# modernize-avoid-bind # Todo: define a better regex match that includes most project headers, but excludes third party # code. diff --git a/.codecov.yml b/.codecov.yml index 70037e6483ff..5253ec7b40f4 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -11,11 +11,6 @@ coverage: round: down range: "70...100" - status: - project: yes - patch: yes - changes: no - parsers: gcov: branch_detection: diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml new file mode 100644 index 000000000000..a9db175035aa --- /dev/null +++ b/.github/workflows/greetings.yml @@ -0,0 +1,20 @@ +name: Greetings + +on: [pull_request, issues] + +jobs: + greeting: + runs-on: ubuntu-latest + steps: + - uses: actions/first-interaction@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue-message: | + Welcome to Apache MXNet (incubating)! We are on a mission to democratize AI, and we are glad that you are contributing to it by opening this issue. + Please make sure to include all the relevant context, and one of the @apache/mxnet-committers will be here shortly. + If you are interested in contributing to our project, let us know! Also, be sure to check out our guide on [contributing to MXNet](https://mxnet.apache.org/community/contribute) and our [development guides wiki](https://cwiki.apache.org/confluence/display/MXNET/Developments). + pr-message: | + Welcome to Apache MXNet (incubating)! We are on a mission to democratize AI, and we are glad that you are contributing to it by opening this pull request. + Please make sure that the changes are covered by tests. One of the @apache/mxnet-committers will be here shortly. + If you run into any issue with the CI and tests, we recommend that you first check out our guide on [developer guides wiki](https://cwiki.apache.org/confluence/display/MXNET/Developments). + Let our @apache/mxnet-committers know if you need any help! diff --git a/3rdparty/nvidia_cub b/3rdparty/nvidia_cub index c3cceac115c0..0158fa19f286 160000 --- a/3rdparty/nvidia_cub +++ b/3rdparty/nvidia_cub @@ -1 +1 @@ -Subproject commit c3cceac115c072fb63df1836ff46d8c60d9eb304 +Subproject commit 0158fa19f28619886232defd412433974af89611 diff --git a/3rdparty/onnx-tensorrt b/3rdparty/onnx-tensorrt index f4745fcaff86..2eb74d933f89 160000 --- a/3rdparty/onnx-tensorrt +++ b/3rdparty/onnx-tensorrt @@ -1 +1 @@ -Subproject commit f4745fcaff868a519834917c657f105a8eef2f53 +Subproject commit 2eb74d933f89e1590fdbfc64971a36e5f72df720 diff --git a/CMakeLists.txt b/CMakeLists.txt index 688dd42c54fe..2c86dd9d0f7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,7 +74,6 @@ option(USE_JEMALLOC "Build with Jemalloc support" OFF) option(USE_LIBJPEG_TURBO "Use libjpeg-turbo" OFF) option(USE_DIST_KVSTORE "Build with DIST_KVSTORE support" OFF) option(USE_PLUGINS_WARPCTC "Use WARPCTC Plugins" OFF) -option(USE_PLUGIN_CAFFE "Use Caffe Plugin" OFF) option(USE_CPP_PACKAGE "Build C++ Package" OFF) option(USE_MXNET_LIB_NAMING "Use MXNet library naming conventions." ON) option(USE_GPROF "Compile with gprof (profiling) flag" OFF) @@ -90,6 +89,7 @@ cmake_dependent_option(ENABLE_TESTCOVERAGE "Enable compilation with test coverag option(USE_INT64_TENSOR_SIZE "Use int64_t to represent the total number of elements in a tensor" OFF) option(BUILD_CYTHON_MODULES "Build cython modules." OFF) option(LOG_FATAL_THROW "Log exceptions but do not abort" ON) +option(USE_CXX11_ABI "Build with GLIBCXX_USE_CXX11_ABI" ON) cmake_dependent_option(USE_SPLIT_ARCH_DLL "Build a separate DLL for each Cuda arch (Windows only)." ON "MSVC" OFF) cmake_dependent_option(USE_CCACHE "Attempt using CCache to wrap the compilation" ON "UNIX" OFF) @@ -100,6 +100,12 @@ message(STATUS "CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}") message(STATUS "CMAKE_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}") +if(USE_CXX11_ABI) + add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1) +else() + add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) +endif() + if(USE_TVM_OP) add_definitions(-DMXNET_USE_TVM_OP=1) endif() @@ -142,12 +148,15 @@ else() execute_process(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE SYSTEM_ARCHITECTURE) endif() -if(CMAKE_BUILD_TYPE STREQUAL "Distribution" AND UNIX AND NOT APPLE) - set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) - set(CMAKE_INSTALL_RPATH $\{ORIGIN\}) - # Enforce DT_PATH instead of DT_RUNPATH - set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--disable-new-dtags") - set(CMAKE_EXE_LINKER_FLAGS "-Wl,--disable-new-dtags") +if(CMAKE_BUILD_TYPE STREQUAL "Distribution") + if(UNIX AND NOT APPLE) + set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) + set(CMAKE_INSTALL_RPATH $\{ORIGIN\}) + # Enforce DT_PATH instead of DT_RUNPATH + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--disable-new-dtags") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,--disable-new-dtags") + endif() + set(Protobuf_USE_STATIC_LIBS ON) endif() set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/upstream;${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules;${CMAKE_MODULE_PATH}") @@ -229,6 +238,7 @@ if(USE_TENSORRT) include_directories(3rdparty/onnx-tensorrt/third_party/onnx/) add_definitions(-DMXNET_USE_TENSORRT=1) add_definitions(-DONNX_NAMESPACE=onnx) + add_definitions(-DONNX_ML=1) find_package(Protobuf REQUIRED) @@ -238,14 +248,11 @@ if(USE_TENSORRT) find_library(ONNX_PROTO_LIBRARY NAMES libonnx_proto.so REQUIRED PATHS ${ONNX_PATH} DOC "Path to onnx_proto library.") - find_library(ONNX_TRT_RUNTIME_LIBRARY NAMES libnvonnxparser_runtime.so REQUIRED - PATHS ${ONNX_TRT_PATH} - DOC "Path to onnx_proto library.") find_library(ONNX_TRT_PARSER_LIBRARY NAMES libnvonnxparser.so REQUIRED PATHS ${ONNX_TRT_PATH} - DOC "Path to onnx_proto library.") + DOC "Path to onnx_proto parser library.") - list(APPEND mxnet_LINKER_LIBS libnvinfer.so ${ONNX_TRT_PARSER_LIBRARY} ${ONNX_TRT_RUNTIME_LIBRARY} + list(APPEND mxnet_LINKER_LIBS libnvinfer.so ${ONNX_TRT_PARSER_LIBRARY} ${ONNX_PROTO_LIBRARY} ${ONNX_LIBRARY} ${PROTOBUF_LIBRARY}) endif() @@ -276,6 +283,7 @@ if(USE_MKLDNN) include_directories(${PROJECT_BINARY_DIR}/3rdparty/mkldnn/include) add_definitions(-DMXNET_USE_MKLDNN=1) list(APPEND mxnet_LINKER_LIBS dnnl) + set_target_properties(dnnl PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency endif() # Allow Cuda compiles outside of src tree to find things in 'src' and 'include' @@ -299,7 +307,6 @@ foreach(var ${C_CXX_INCLUDE_DIRECTORIES}) endforeach() include_directories("include") -include_directories("3rdparty/nvidia_cub") include_directories("3rdparty/tvm/nnvm/include") include_directories("3rdparty/tvm/include") include_directories("3rdparty/dmlc-core/include") @@ -407,6 +414,7 @@ if(USE_OPENMP) AND NOT CMAKE_CROSSCOMPILING) load_omp() list(APPEND mxnet_LINKER_LIBS omp) + set_target_properties(omp PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency if(UNIX) list(APPEND mxnet_LINKER_LIBS pthread) endif() @@ -464,6 +472,8 @@ set(GTEST_MAIN_LIBRARY gtest_main) set(GTEST_LIBRARY gtest) add_subdirectory(${GTEST_ROOT}) +set_target_properties(gtest PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency +set_target_properties(gtest_main PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency find_package(GTest REQUIRED) # cudnn detection @@ -480,6 +490,7 @@ endif() if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/dmlc-core/cmake) add_subdirectory("3rdparty/dmlc-core") + set_target_properties(dmlc PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency endif() FILE(GLOB_RECURSE SOURCE "src/*.cc" "src/*.h" "include/*.h") @@ -494,7 +505,9 @@ FILE(GLOB_RECURSE NNVMSOURCE 3rdparty/tvm/nnvm/src/core/*.h 3rdparty/tvm/nnvm/src/pass/*.h 3rdparty/tvm/nnvm/include/*.h) -list(APPEND SOURCE ${NNVMSOURCE}) +add_library(nnvm OBJECT ${NNVMSOURCE}) +set_target_properties(nnvm PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency +list(APPEND SOURCE $) # add source group FILE(GLOB_RECURSE GROUP_SOURCE "src/*.cc" "3rdparty/tvm/nnvm/*.cc" "plugin/*.cc") @@ -521,39 +534,6 @@ if(USE_OPERATOR_TUNING AND USE_OPENMP) add_definitions(-DMXNET_USE_OPERATOR_TUNING=1) endif() -if(USE_PLUGIN_CAFFE) - if(NOT USE_CUDA) - set(CPU_ONLY ON) - add_definitions(-DCPU_ONLY=1) - endif() - if(NOT DEFINED CAFFE_PATH) - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/caffe) - set(CAFFE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/caffe) - else() - set(CAFFE_PATH $ENV{CAFFE_PATH}) - endif() - endif() - list(APPEND CMAKE_MODULE_PATH ${CAFFE_PATH}/cmake) - include_directories(${CAFFE_PATH}/include) - include_directories(${CAFFE_PATH}/build/src) - include_directories(${CMAKE_BINARY_DIR}/caffe/include) - link_directories(${CAFFE_PATH}/build/lib) - if(NOT DEFINED CAFFE_PATH) - message(FATAL_ERROR "Please set CAFFE_PATH to point to the caffe source installation") - endif() - FILE(GLOB_RECURSE PLUGINS_SOURCE "plugin/caffe/*.cc" "plugin/caffe/*.h") - FILE(GLOB_RECURSE PLUGINS_CUSRC "plugin/caffe/*.cu") - list(APPEND SOURCE ${PLUGINS_SOURCE}) - list(APPEND CUDA ${PLUGINS_CUSRC}) - include_directories(${CMAKE_BINARY_DIR}/include) - add_definitions(-DMXNET_USE_CAFFE=1) - list(APPEND mxnet_LINKER_LIBS - protobuf boost_system boost_thread boost_filesystem - gflags glog caffe - ${Caffe_LINKER_LIBS} -) -endif() - if (NOT (EXTRA_OPERATORS STREQUAL "")) mxnet_source_group("Extra" GLOB_RECURSE "${EXTRA_OPERATORS}/*.cc") mxnet_source_group("Extra\\Cuda" GLOB_RECURSE "${EXTRA_OPERATORS}/*.cu") @@ -640,14 +620,10 @@ if(USE_CUDA) link_directories(${CUDAToolkit_LIBRARY_DIR}) endif() -# unsupported: if caffe is a subdirectory of mxnet, load its CMakeLists.txt as well -if(USE_PLUGIN_CAFFE) - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/caffe) - add_subdirectory(caffe) - endif() +if(CUDAToolkit_VERSION_MAJOR LESS "11") + include_directories("3rdparty/nvidia_cub") endif() - if(MSVC) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /EHsc") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /EHsc /Gy") @@ -674,7 +650,6 @@ if(UNIX) endif() target_link_libraries(mxnet PUBLIC mshadow) target_link_libraries(mxnet PUBLIC ${CMAKE_DL_LIBS}) - target_compile_definitions(mxnet PUBLIC DMLC_LOG_FATAL_THROW=$) if(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") target_compile_options(mxnet PRIVATE "$<$:-Werror>") # Ignore erroneous compiler warnings: @@ -701,7 +676,6 @@ elseif(MSVC) foreach(arch ${arch_code_list}) add_library(mxnet_${arch} SHARED ${SOURCE}) target_link_libraries(mxnet_${arch} PUBLIC mshadow) - target_compile_definitions(mxnet_${arch} PUBLIC DMLC_LOG_FATAL_THROW=$) target_compile_options( mxnet_${arch} PRIVATE @@ -737,10 +711,10 @@ elseif(MSVC) endif(USE_SPLIT_ARCH_DLL) else() add_library(mxnet SHARED ${SOURCE}) - target_compile_definitions(mxnet PUBLIC DMLC_LOG_FATAL_THROW=$) target_link_libraries(mxnet PUBLIC mshadow) endif() endif() +target_compile_definitions(mxnet PUBLIC DMLC_LOG_FATAL_THROW=$) # extension libraries (custom operators, custom subgraphs) are built by default add_library(customop_lib SHARED ${CMAKE_CURRENT_SOURCE_DIR}/example/extensions/lib_custom_op/gemm_lib.cc) @@ -782,6 +756,7 @@ if(USE_DIST_KVSTORE) add_subdirectory("3rdparty/ps-lite") add_definitions(-DMXNET_USE_DIST_KVSTORE) list(APPEND mxnet_LINKER_LIBS pslite) + set_target_properties(pslite PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency endif() if(USE_MKLDNN) @@ -796,6 +771,9 @@ function(BuildTVMOP) # scope the variables in BuildTVM.cmake to avoid conflict include(cmake/BuildTVM.cmake) add_subdirectory("3rdparty/tvm") + set_target_properties(tvm PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency + set_target_properties(tvm_topi PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency + set_target_properties(tvm_runtime PROPERTIES CXX_CLANG_TIDY "") # don't lint 3rdparty dependency endfunction() if(USE_TVM_OP) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index f63b2412077b..4146d45b5c9d 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -254,6 +254,7 @@ List of Contributors * [Connor Goggins](https://github.com/connorgoggins) * [Wei Chu](https://github.com/waytrue17) * [Yang Shi](https://github.com/ys2843) +* [Joe Evans](https://github.com/josephevans) Label Bot --------- diff --git a/ci/Jenkinsfile_docker_cache b/ci/Jenkinsfile_docker_cache index 96cf2c7bef86..5f378b5d69eb 100644 --- a/ci/Jenkinsfile_docker_cache +++ b/ci/Jenkinsfile_docker_cache @@ -37,7 +37,6 @@ core_logic: { ws('workspace/docker_cache') { timeout(time: total_timeout, unit: 'MINUTES') { utils.init_git() - sh "python3 ./ci/docker_cache.py --docker-registry ${env.DOCKER_CACHE_REGISTRY}" sh "cd ci && python3 ./docker_login.py --secret-name ${env.DOCKERHUB_SECRET_NAME} && docker-compose -f docker/docker-compose.yml pull && docker-compose -f docker/docker-compose.yml build --parallel && COMPOSE_HTTP_TIMEOUT=600 docker-compose -f docker/docker-compose.yml push && docker logout" } } diff --git a/ci/build.py b/ci/build.py index 70ea8dcee37b..f42be1861b19 100755 --- a/ci/build.py +++ b/ci/build.py @@ -18,23 +18,18 @@ # specific language governing permissions and limitations # under the License. -"""Multi arch dockerized build tool. +"""Multi arch dockerized build tool.""" -""" - -__author__ = 'Marco de Abreu, Kellen Sunderland, Anton Chernov, Pedro Larroy' -__version__ = '0.3' +__author__ = 'Marco de Abreu, Kellen Sunderland, Anton Chernov, Pedro Larroy, Leonard Lausen' +__version__ = '0.4' import argparse -import glob import pprint -import re import os -import shutil import signal import subprocess from itertools import chain -from subprocess import check_call, check_output +from subprocess import check_call from typing import * import yaml @@ -42,49 +37,18 @@ from safe_docker_run import SafeDockerClient from util import * -# NOTE: Temporary whitelist used until all Dockerfiles are refactored for docker compose -DOCKER_COMPOSE_WHITELIST = ('centos7_cpu', 'centos7_gpu_cu92', 'centos7_gpu_cu100', - 'centos7_gpu_cu101', 'centos7_gpu_cu102', 'ubuntu_cpu', - 'ubuntu_build_cuda', 'ubuntu_gpu_cu101', 'publish.test.centos7_cpu', - 'publish.test.centos7_gpu', 'android_armv7', 'android_armv8', - 'armv6', 'armv7', 'armv8', 'test.armv7', 'test.armv8') -# Files for docker compose -DOCKER_COMPOSE_FILES = set(('docker/build.centos7', 'docker/build.ubuntu', 'docker/build.android', - 'docker/build.arm', 'docker/test.arm', 'docker/publish.test.centos7')) - - -def get_dockerfiles_path(): - return "docker" - - -def get_platforms(path: str = get_dockerfiles_path(), legacy_only=False) -> List[str]: - """Get a list of architectures given our dockerfiles""" - dockerfiles = glob.glob(os.path.join(path, "Dockerfile.*")) - dockerfiles = set(filter(lambda x: x[-1] != '~', dockerfiles)) - files = set(map(lambda x: re.sub(r"Dockerfile.(.*)", r"\1", x), dockerfiles)) - if legacy_only: - files = files - DOCKER_COMPOSE_FILES - platforms = list(map(lambda x: os.path.split(x)[1], sorted(files))) - return platforms +def get_platforms() -> List[str]: + """Get a list of architectures declared in docker-compose.yml""" + with open("docker/docker-compose.yml", "r") as f: + compose_config = yaml.load(f.read(), yaml.SafeLoader) + return list(compose_config["services"].keys()) def get_docker_tag(platform: str, registry: str) -> str: """:return: docker tag to be used for the container""" - if platform in DOCKER_COMPOSE_WHITELIST: - with open("docker/docker-compose.yml", "r") as f: - compose_config = yaml.load(f.read(), yaml.SafeLoader) - return compose_config["services"][platform]["image"].replace('${DOCKER_CACHE_REGISTRY}', registry) - - platform = platform if any(x in platform for x in ['build.', 'publish.']) else 'build.{}'.format(platform) - if not registry: - registry = "mxnet_local" - return "{0}/{1}".format(registry, platform) - - -def get_dockerfile(platform: str, path=get_dockerfiles_path()) -> str: - platform = platform if any(x in platform for x in ['build.', 'publish.']) else 'build.{}'.format(platform) - return os.path.join(path, "Dockerfile.{0}".format(platform)) - + with open("docker/docker-compose.yml", "r") as f: + compose_config = yaml.load(f.read(), yaml.SafeLoader) + return compose_config["services"][platform]["image"].replace('${DOCKER_CACHE_REGISTRY}', registry) def build_docker(platform: str, registry: str, num_retries: int, no_cache: bool, cache_intermediate: bool = False) -> str: @@ -96,50 +60,18 @@ def build_docker(platform: str, registry: str, num_retries: int, no_cache: bool, :param no_cache: pass no-cache to docker to rebuild the images :return: Id of the top level image """ - tag = get_docker_tag(platform=platform, registry=registry) + logging.info('Building docker container \'%s\' based on ci/docker/docker-compose.yml', platform) + # We add a user with the same group as the executing non-root user so files created in the + # container match permissions of the local user. Same for the group. + cmd = ['docker-compose', '-f', 'docker/docker-compose.yml', 'build', + "--build-arg", "USER_ID={}".format(os.getuid()), + "--build-arg", "GROUP_ID={}".format(os.getgid())] + if cache_intermediate: + cmd.append('--no-rm') + cmd.append(platform) env = os.environ.copy() - - # Case 1: docker-compose - if platform in DOCKER_COMPOSE_WHITELIST: - logging.info('Building docker container tagged \'%s\' based on ci/docker/docker-compose.yml', tag) - # We add a user with the same group as the executing non-root user so files created in the - # container match permissions of the local user. Same for the group. - cmd = ['docker-compose', '-f', 'docker/docker-compose.yml', 'build', - "--build-arg", "USER_ID={}".format(os.getuid()), - "--build-arg", "GROUP_ID={}".format(os.getgid())] - if cache_intermediate: - cmd.append('--no-rm') - cmd.append(platform) - env["DOCKER_CACHE_REGISTRY"] = registry - else: # Case 2: Deprecated way, will be removed - # We add a user with the same group as the executing non-root user so files created in the - # container match permissions of the local user. Same for the group. - # - # These variables are used in the docker files to create user and group with these ids. - # see: docker/install/ubuntu_adduser.sh - # - # cache-from is needed so we use the cached images tagged from the remote via - # docker pull see: docker_cache.load_docker_cache - # - # This also prevents using local layers for caching: https://github.com/moby/moby/issues/33002 - # So to use local caching, we should omit the cache-from by using --no-dockerhub-cache argument to this - # script. - # - # This doesn't work with multi head docker files. - logging.info("Building docker container tagged '%s'", tag) - cmd = ["docker", "build", - "-f", get_dockerfile(platform), - "--build-arg", "USER_ID={}".format(os.getuid()), - "--build-arg", "GROUP_ID={}".format(os.getgid())] - if no_cache: - cmd.append("--no-cache") - if cache_intermediate: - cmd.append("--rm=false") - elif registry: - cmd.extend(["--cache-from", tag]) - cmd.extend(["-t", tag, get_dockerfiles_path()]) - + env["DOCKER_CACHE_REGISTRY"] = registry @retry(subprocess.CalledProcessError, tries=num_retries) def run_cmd(env=None): @@ -148,27 +80,6 @@ def run_cmd(env=None): run_cmd(env=env) - # Get image id by reading the tag. It's guaranteed (except race condition) that the tag exists. Otherwise, the - # check_call would have failed - image_id = _get_local_image_id(docker_tag=tag) - if not image_id: - raise FileNotFoundError('Unable to find docker image id matching with {}'.format(tag)) - return image_id - - -def _get_local_image_id(docker_tag): - """ - Get the image id of the local docker layer with the passed tag - :param docker_tag: docker tag - :return: Image id as string or None if tag does not exist - """ - cmd = ["docker", "images", "-q", docker_tag] - image_id_b = check_output(cmd) - image_id = image_id_b.decode('utf-8').strip() - if not image_id: - raise RuntimeError('Unable to find docker image id matching with tag {}'.format(docker_tag)) - return image_id - def buildir() -> str: return os.path.join(get_mxnet_root(), "build") @@ -291,21 +202,11 @@ def list_platforms() -> str: def load_docker_cache(platform, tag, docker_registry) -> None: """Imports tagged container from the given docker registry""" if docker_registry: - if platform in DOCKER_COMPOSE_WHITELIST: - env = os.environ.copy() - env["DOCKER_CACHE_REGISTRY"] = docker_registry - cmd = ['docker-compose', '-f', 'docker/docker-compose.yml', 'pull', platform] - logging.info("Running command: 'DOCKER_CACHE_REGISTRY=%s %s'", docker_registry, ' '.join(cmd)) - check_call(cmd, env=env) - return - - # noinspection PyBroadException - try: - import docker_cache - logging.info('Docker cache download is enabled from registry %s', docker_registry) - docker_cache.load_docker_cache(registry=docker_registry, docker_tag=tag) - except Exception: - logging.exception('Unable to retrieve Docker cache. Continue without...') + env = os.environ.copy() + env["DOCKER_CACHE_REGISTRY"] = docker_registry + cmd = ['docker-compose', '-f', 'docker/docker-compose.yml', 'pull', platform] + logging.info("Running command: 'DOCKER_CACHE_REGISTRY=%s %s'", docker_registry, ' '.join(cmd)) + check_call(cmd, env=env) else: logging.info('Distributed docker cache disabled') @@ -327,9 +228,9 @@ def main() -> int: parser = argparse.ArgumentParser(description="""Utility for building and testing MXNet on docker containers""", epilog="") - parser.add_argument("-p", "--platform", - help="platform", - type=str) + parser.add_argument("-p", "--platform", type=str, help= \ + "Platform. See ci/docker/docker-compose.yml for list of supported " \ + "platforms (services).") parser.add_argument("-b", "--build-only", help="Only build the container, don't build the project", @@ -339,10 +240,6 @@ def main() -> int: help="Only run the container, don't rebuild the container", action='store_true') - parser.add_argument("-a", "--all", - help="build for all platforms", - action='store_true') - parser.add_argument("-n", "--nvidiadocker", help="Use nvidia docker", action='store_true') @@ -443,32 +340,6 @@ def main() -> int: logging.critical("Execution of %s failed with status: %d", command, ret) return ret - elif args.all: - platforms = get_platforms() - platforms = [platform for platform in platforms if 'build.' in platform] - logging.info("Building for all architectures: %s", platforms) - logging.info("Artifacts will be produced in the build/ directory.") - for platform in platforms: - tag = get_docker_tag(platform=platform, registry=args.docker_registry) - load_docker_cache(platform=platform, tag=tag, docker_registry=args.docker_registry) - build_docker(platform, registry=args.docker_registry, num_retries=args.docker_build_retries, - no_cache=args.no_cache) - if args.build_only: - continue - shutil.rmtree(buildir(), ignore_errors=True) - build_platform = "build_{}".format(platform) - plat_buildir = os.path.abspath(os.path.join(get_mxnet_root(), '..', - "mxnet_{}".format(build_platform))) - if os.path.exists(plat_buildir): - logging.warning("%s already exists, skipping", plat_buildir) - continue - command = ["/work/mxnet/ci/docker/runtime_functions.sh", build_platform] - container_run( - docker_client=docker_client, platform=platform, nvidia_runtime=args.nvidiadocker, - shared_memory_size=args.shared_memory_size, command=command, docker_registry=args.docker_registry, - local_ccache_dir=args.ccache_dir, environment=environment) - shutil.move(buildir(), plat_buildir) - logging.info("Built files left in: %s", plat_buildir) else: parser.print_help() diff --git a/ci/dev_menu.py b/ci/dev_menu.py index cd2aa8d46e1e..dcc01723d83d 100644 --- a/ci/dev_menu.py +++ b/ci/dev_menu.py @@ -130,7 +130,6 @@ def provision_virtualenv(venv_path=DEFAULT_PYENV): ('[Docker] sanity_check. Check for linting and code formatting and licenses.', [ "ci/build.py --platform ubuntu_cpu /work/runtime_functions.sh sanity_check", - "ci/build.py --platform ubuntu_rat /work/runtime_functions.sh nightly_test_rat_check", ]), ('[Docker] Python3 CPU unittests', [ diff --git a/ci/docker/Dockerfile.build.ubuntu b/ci/docker/Dockerfile.build.ubuntu index 415e6ae881ae..abc3e8c6ce94 100644 --- a/ci/docker/Dockerfile.build.ubuntu +++ b/ci/docker/Dockerfile.build.ubuntu @@ -53,9 +53,9 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ protobuf-compiler \ libprotobuf-dev \ clang-6.0 \ - clang-tidy-6.0 \ python-yaml \ clang-10 \ + clang-tidy-10 \ g++ \ g++-8 \ intel-mkl-2020.0-088 \ @@ -68,9 +68,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ libzmq3-dev \ liblapack-dev \ libopencv-dev \ - # Caffe - caffe-cpu \ - libcaffe-cpu-dev \ + libxml2-dev \ # BytePS numactl \ libnuma-dev \ @@ -80,23 +78,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ python3-pip \ python3-nose \ python3-nose-timer \ - # Scala - openjdk-8-jdk \ - openjdk-8-jre \ - maven \ - scala \ - # Clojure - clojure \ - leiningen \ - # R - r-base-core \ - r-cran-devtools \ - libcairo2-dev \ - libxml2-dev \ ## Documentation doxygen \ pandoc \ ## Build-dependencies for ccache 3.7.9 + autoconf \ gperf \ libb2-dev \ libzstd-dev && \ @@ -114,22 +100,16 @@ RUN cd /usr/local/src && \ cd /usr/local/src && \ rm -rf ccache +# RAT License Checker tool +RUN cd /usr/local/src && \ + wget https://archive.apache.org/dist/creadur/apache-rat-0.13/apache-rat-0.13-bin.tar.gz && \ + tar xf apache-rat-0.13-bin.tar.gz + # Python & cmake COPY install/requirements /work/ RUN python3 -m pip install cmake==3.16.6 && \ python3 -m pip install -r /work/requirements -# Only OpenJDK 8 supported at this time.. -RUN update-java-alternatives -s java-1.8.0-openjdk-amd64 - -# julia not available on 18.04 -COPY install/ubuntu_julia.sh /work/ -RUN /work/ubuntu_julia.sh - -# MXNetJS nightly needs emscripten for wasm -COPY install/ubuntu_emscripten.sh /work/ -RUN /work/ubuntu_emscripten.sh - ARG USER_ID=0 COPY install/docker_filepermissions.sh /work/ RUN /work/docker_filepermissions.sh @@ -152,6 +132,30 @@ RUN cd /usr/local && \ cd thrust && \ git checkout 1.9.8 +# Install TensorRT +# We need to redeclare ARG due to +# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact +ARG BASE_IMAGE +RUN export SHORT_CUDA_VERSION=${CUDA_VERSION%.*} && \ + apt-get update && \ + if [ ${SHORT_CUDA_VERSION} = 10.0 ]; then \ + TRT_VERSION="7.0.0-1+cuda10.0"; \ + TRT_MAJOR_VERSION=7; \ + elif [ ${SHORT_CUDA_VERSION} = 10.1 ]; then \ + TRT_VERSION="6.0.1-1+cuda10.1"; \ + TRT_MAJOR_VERSION=6; \ + elif [ ${SHORT_CUDA_VERSION} = 10.2 ]; then \ + TRT_VERSION="7.0.0-1+cuda10.2"; \ + TRT_MAJOR_VERSION=7; \ + else \ + echo "ERROR: Cuda ${SHORT_CUDA_VERSION} not yet supported in Dockerfile.build.ubuntu"; \ + exit 1; \ + fi && \ + apt-get install -y libnvinfer${TRT_MAJOR_VERSION}=${TRT_VERSION} \ + libnvinfer-dev=${TRT_VERSION} \ + libnvinfer-plugin${TRT_MAJOR_VERSION}=${TRT_VERSION} \ + libnvinfer-plugin-dev=${TRT_VERSION} && \ + rm -rf /var/lib/apt/lists/* FROM gpu as gpuwithcudaruntimelibs # Special case because the CPP-Package requires the CUDA runtime libs diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_c b/ci/docker/Dockerfile.build.ubuntu_cpu_c deleted file mode 100644 index c7969da1bb1d..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_c +++ /dev/null @@ -1,35 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh - -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh - -RUN apt-get update && apt-get install -y doxygen graphviz - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet \ No newline at end of file diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_jekyll b/ci/docker/Dockerfile.build.ubuntu_cpu_jekyll index 52ed2e083c69..6586a4e907d3 100644 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_jekyll +++ b/ci/docker/Dockerfile.build.ubuntu_cpu_jekyll @@ -18,53 +18,28 @@ # # Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU -FROM ubuntu:16.04 +FROM ruby:2.6.5-buster WORKDIR /work/deps -SHELL ["/bin/bash", "-l", "-c" ] - -RUN apt-get update && apt-get install -y \ - build-essential \ - git \ - zlib1g-dev \ - gnupg2 \ - curl \ - wget \ - unzip - -# Always last, except here to prevent conflicts with rvm -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -RUN curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - && \ - curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import - && \ - curl -sSL https://get.rvm.io | bash -s stable - -RUN source /etc/profile.d/rvm.sh && \ - rvm requirements && \ - rvm install 2.6.5 && \ - rvm use 2.6.5 --default - ENV BUNDLE_HOME=/work/deps/bundle ENV BUNDLE_APP_CONFIG=/work/deps/bundle ENV BUNDLE_BIN=/work/deps/bundle/bin ENV GEM_BIN=/work/deps/gem/bin ENV GEM_HOME=/work/deps/gem -RUN echo "gem: --no-ri --no-rdoc" > ~/.gemrc -RUN yes | gem update --system -RUN yes | gem install --force bundler -RUN gem install jekyll +RUN echo "gem: --no-ri --no-rdoc" > ~/.gemrc && \ + yes | gem update --system && \ + yes | gem install --force bundler && \ + gem install jekyll ENV PATH=$BUNDLE_BIN:$GEM_BIN:$PATH COPY runtime_functions.sh /work/ -RUN chown -R jenkins_slave /work/ && \ - chown -R jenkins_slave /usr/local/bin && \ - chown -R jenkins_slave /usr/local/rvm +ARG USER_ID=0 +ARG GROUP_ID=0 +COPY install/ubuntu_adduser.sh /work/ +RUN /work/ubuntu_adduser.sh WORKDIR /work/mxnet diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_julia b/ci/docker/Dockerfile.build.ubuntu_cpu_julia deleted file mode 100644 index e100d4df09a8..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_julia +++ /dev/null @@ -1,66 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh - -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh - -COPY install/ubuntu_python.sh /work/ -COPY install/requirements /work/ -RUN /work/ubuntu_python.sh - -COPY install/ubuntu_scala.sh /work/ -COPY install/sbt.gpg /work/ -RUN /work/ubuntu_scala.sh - -COPY install/ubuntu_clojure.sh /work/ -RUN /work/ubuntu_clojure.sh - -COPY install/ubuntu_julia.sh /work/ -RUN /work/ubuntu_julia.sh - -COPY install/ubuntu_clang.sh /work/ -RUN /work/ubuntu_clang.sh - -COPY install/ubuntu_gcc8.sh /work/ -RUN /work/ubuntu_gcc8.sh - -COPY install/ubuntu_r.sh /work/ -COPY install/r.gpg /work/ -RUN /work/ubuntu_r.sh - -COPY install/ubuntu_docs.sh /work/ -RUN /work/ubuntu_docs.sh - -# Always last -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_r b/ci/docker/Dockerfile.build.ubuntu_cpu_r deleted file mode 100644 index 2354cb3b66d6..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_r +++ /dev/null @@ -1,46 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh - -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh - -COPY install/ubuntu_gcc8.sh /work/ -RUN /work/ubuntu_gcc8.sh - -COPY install/ubuntu_r.sh /work/ -COPY install/r.gpg /work/ -RUN /work/ubuntu_r.sh - -# Always last -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet diff --git a/ci/docker/Dockerfile.build.ubuntu_cpu_scala b/ci/docker/Dockerfile.build.ubuntu_cpu_scala deleted file mode 100644 index a36e4426c39c..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_cpu_scala +++ /dev/null @@ -1,53 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh - -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh - -COPY install/ubuntu_gcc8.sh /work/ -RUN /work/ubuntu_gcc8.sh - -COPY install/ubuntu_python.sh /work/ -COPY install/requirements /work/ -RUN /work/ubuntu_python.sh - -COPY install/ubuntu_scala.sh /work/ -COPY install/sbt.gpg /work/ -RUN /work/ubuntu_scala.sh - -COPY install/ubuntu_clojure.sh /work/ -RUN /work/ubuntu_clojure.sh - -# Always last -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet diff --git a/ci/docker/Dockerfile.build.ubuntu_gpu_tensorrt b/ci/docker/Dockerfile.build.ubuntu_gpu_tensorrt deleted file mode 100644 index 90bd772ecb17..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_gpu_tensorrt +++ /dev/null @@ -1,47 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to run MXNet on Ubuntu 16.04 for CPU - -FROM nvidia/cuda:10.0-devel - -WORKDIR /work/deps - -COPY install/ubuntu_core.sh /work/ -RUN /work/ubuntu_core.sh -COPY install/deb_ubuntu_ccache.sh /work/ -RUN /work/deb_ubuntu_ccache.sh -COPY install/ubuntu_python.sh /work/ -COPY install/requirements /work/ -RUN /work/ubuntu_python.sh -COPY install/tensorrt.sh /work -RUN /work/tensorrt.sh - -ARG USER_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -ENV CUDNN_VERSION=7.5.0.56 -COPY install/ubuntu_cudnn.sh /work/ -RUN /work/ubuntu_cudnn.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib -ENV CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:/usr/local/cuda-10.0/targets/x86_64-linux/include/ diff --git a/ci/docker/Dockerfile.build.ubuntu_rat b/ci/docker/Dockerfile.build.ubuntu_rat deleted file mode 100644 index 234d2e42e946..000000000000 --- a/ci/docker/Dockerfile.build.ubuntu_rat +++ /dev/null @@ -1,36 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to run the Apache RAT license check - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_rat.sh /work/ -RUN /work/ubuntu_rat.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.test.ubuntu1604_cpu b/ci/docker/Dockerfile.publish.test.ubuntu1604_cpu deleted file mode 100644 index bbb7b6a0d7bd..000000000000 --- a/ci/docker/Dockerfile.publish.test.ubuntu1604_cpu +++ /dev/null @@ -1,39 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_scala.sh /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.test.ubuntu1604_gpu b/ci/docker/Dockerfile.publish.test.ubuntu1604_gpu deleted file mode 100644 index 660461dc0cfa..000000000000 --- a/ci/docker/Dockerfile.publish.test.ubuntu1604_gpu +++ /dev/null @@ -1,39 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to run MXNet on Ubuntu 16.04 for GPU - -FROM nvidia/cuda:9.2-cudnn7-devel-ubuntu16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_scala.sh /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.test.ubuntu1804_cpu b/ci/docker/Dockerfile.publish.test.ubuntu1804_cpu deleted file mode 100644 index e3a8c193f234..000000000000 --- a/ci/docker/Dockerfile.publish.test.ubuntu1804_cpu +++ /dev/null @@ -1,41 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to build and run MXNet on Ubuntu 18.04 for CPU - -FROM ubuntu:18.04 - -WORKDIR /work/deps - -ENV DEBIAN_FRONTEND noninteractive - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_scala.sh /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.test.ubuntu1804_gpu b/ci/docker/Dockerfile.publish.test.ubuntu1804_gpu deleted file mode 100644 index 99f7e0d3eff9..000000000000 --- a/ci/docker/Dockerfile.publish.test.ubuntu1804_gpu +++ /dev/null @@ -1,41 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to run MXNet on Ubuntu 18.04 for GPU - -FROM nvidia/cuda:9.2-cudnn7-devel-ubuntu18.04 - -WORKDIR /work/deps - -ENV DEBIAN_FRONTEND noninteractive - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_scala.sh /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.ubuntu1604_cpu b/ci/docker/Dockerfile.publish.ubuntu1604_cpu deleted file mode 100644 index e5898b66c161..000000000000 --- a/ci/docker/Dockerfile.publish.ubuntu1604_cpu +++ /dev/null @@ -1,44 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to build and run MXNet on Ubuntu 16.04 for CPU - -FROM ubuntu:16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_python.sh /work/ -COPY install/requirements /work/ -RUN /work/ubuntu_python.sh - -COPY install/ubuntu_scala.sh /work/ -COPY install/sbt.gpg /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/Dockerfile.publish.ubuntu1604_gpu b/ci/docker/Dockerfile.publish.ubuntu1604_gpu deleted file mode 100644 index 0bd8b8259b90..000000000000 --- a/ci/docker/Dockerfile.publish.ubuntu1604_gpu +++ /dev/null @@ -1,44 +0,0 @@ -# -*- mode: dockerfile -*- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Dockerfile to run MXNet on Ubuntu 16.04 for GPU - -FROM nvidia/cuda:9.2-cudnn7-devel-ubuntu16.04 - -WORKDIR /work/deps - -COPY install/ubuntu_base.sh /work/ -RUN /work/ubuntu_base.sh - -COPY install/ubuntu_python.sh /work/ -COPY install/requirements /work/ -RUN /work/ubuntu_python.sh - -COPY install/ubuntu_scala.sh /work/ -COPY install/sbt.gpg /work/ -RUN /work/ubuntu_scala.sh - -ARG USER_ID=0 -ARG GROUP_ID=0 -COPY install/ubuntu_adduser.sh /work/ -RUN /work/ubuntu_adduser.sh - -COPY runtime_functions.sh /work/ - -WORKDIR /work/mxnet -ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib diff --git a/ci/docker/docker-compose.yml b/ci/docker/docker-compose.yml index 73beb232b1ca..865abc128167 100644 --- a/ci/docker/docker-compose.yml +++ b/ci/docker/docker-compose.yml @@ -108,6 +108,16 @@ services: BASE_IMAGE: nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04 cache_from: - ${DOCKER_CACHE_REGISTRY}/build.ubuntu_gpu_cu101:latest + ubuntu_gpu_cu102: + image: ${DOCKER_CACHE_REGISTRY}/build.ubuntu_gpu_cu102:latest + build: + context: . + dockerfile: Dockerfile.build.ubuntu + target: gpu + args: + BASE_IMAGE: nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 + cache_from: + - ${DOCKER_CACHE_REGISTRY}/build.ubuntu_gpu_cu102:latest ubuntu_build_cuda: image: ${DOCKER_CACHE_REGISTRY}/build.ubuntu_build_cuda:latest build: @@ -206,3 +216,34 @@ services: BASE_IMAGE: nvidia/cuda:9.2-cudnn7-devel-centos7 cache_from: - ${DOCKER_CACHE_REGISTRY}/publish.test.centos7_gpu:latest + ################################################################################################### + # Miscellaneous containers + ################################################################################################### + jetson: + image: ${DOCKER_CACHE_REGISTRY}/build.jetson:latest + build: + context: . + dockerfile: Dockerfile.build.jetson + cache_from: + - ${DOCKER_CACHE_REGISTRY}/build.jetson:latest + ubuntu_cpu_jekyll: + image: ${DOCKER_CACHE_REGISTRY}/build.ubuntu_cpu_jekyll:latest + build: + context: . + dockerfile: Dockerfile.build.ubuntu_cpu_jekyll + cache_from: + - ${DOCKER_CACHE_REGISTRY}/build.ubuntu_cpu_jekyll:latest + ubuntu_cpu_python: + image: ${DOCKER_CACHE_REGISTRY}/build.ubuntu_cpu_python:latest + build: + context: . + dockerfile: Dockerfile.build.ubuntu_cpu_python + cache_from: + - ${DOCKER_CACHE_REGISTRY}/build.ubuntu_cpu_python:latest + ubuntu_blc: + image: ${DOCKER_CACHE_REGISTRY}/build.ubuntu_blc:latest + build: + context: . + dockerfile: Dockerfile.build.ubuntu_blc + cache_from: + - ${DOCKER_CACHE_REGISTRY}/build.ubuntu_blc:latest diff --git a/ci/docker/install/export_gpg_keys.sh b/ci/docker/install/export_gpg_keys.sh deleted file mode 100755 index 604a27b98143..000000000000 --- a/ci/docker/install/export_gpg_keys.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -gpg --keyserver keyserver.ubuntu.com --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823 -gpg --output sbt.gpg --export scalasbt@gmail.com -gpg --keyserver keyserver.ubuntu.com --recv E084DAB9 -gpg --output r.gpg --export marutter@gmail.com diff --git a/ci/docker/install/r.gpg b/ci/docker/install/r.gpg deleted file mode 100644 index 77fd6341e9d4..000000000000 Binary files a/ci/docker/install/r.gpg and /dev/null differ diff --git a/ci/docker/install/sbt.gpg b/ci/docker/install/sbt.gpg deleted file mode 100644 index 664f01b37d01..000000000000 Binary files a/ci/docker/install/sbt.gpg and /dev/null differ diff --git a/ci/docker/install/tensorrt.sh b/ci/docker/install/tensorrt.sh deleted file mode 100755 index e98c7643f923..000000000000 --- a/ci/docker/install/tensorrt.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -# Install gluoncv since we're testing Gluon models as well -pip3 install gluoncv==0.2.0 - -# Install Protobuf -# Install protoc 3.5 and build protobuf here (for onnx and onnx-tensorrt) -pushd . -cd .. -apt-get update -apt-get install -y automake libtool zip -git clone --recursive -b 3.5.1.1 https://github.com/google/protobuf.git -cd protobuf -./autogen.sh -./configure --disable-shared CXXFLAGS=-fPIC -make -j$(nproc) -make install -rm -rf /usr/local/lib/libprotobuf-lite.so* -rm -rf /usr/local/lib/libprotobuf.so* -rm -rf /usr/local/lib/libprotoc.so* -ldconfig -popd - -# Install TensorRT -echo "TensorRT build enabled. Installing TensorRT." -wget -qO tensorrt.deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb -dpkg -i tensorrt.deb -apt-get update -apt-get install -y --allow-downgrades libnvinfer5=5.1.5-1+cuda10.0 -apt-get install -y --allow-downgrades libnvinfer-dev=5.1.5-1+cuda10.0 -apt-mark hold libnvinfer5 libnvinfer-dev -rm tensorrt.deb diff --git a/ci/docker/install/ubuntu_base.sh b/ci/docker/install/ubuntu_base.sh deleted file mode 100755 index f36e53279f57..000000000000 --- a/ci/docker/install/ubuntu_base.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -# build and install are separated so changes to build don't invalidate -# the whole docker cache for the image - -set -ex -apt-get update || true -apt-get install -y \ - build-essential \ - ca-certificates \ - cmake \ - curl \ - git \ - ninja-build \ - libgfortran3 \ - software-properties-common \ - sudo \ - unzip \ - expect \ - gnupg \ - gnupg2 \ - gnupg-agent \ - wget diff --git a/ci/docker/install/ubuntu_clang.sh b/ci/docker/install/ubuntu_clang.sh deleted file mode 100755 index c81f10dfb664..000000000000 --- a/ci/docker/install/ubuntu_clang.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -# build and install are separated so changes to build don't invalidate -# the whole docker cache for the image - -set -ex - -# Install clang 3.9 (the same version as in XCode 8.*) and 10 (latest major release) -wget -qO - http://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ - apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-3.9 main" && \ - apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-6.0 main" && \ - apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" && \ - apt-get update && \ - apt-get install -y clang-3.9 clang-6.0 clang-10 clang-tidy-6.0 && \ - clang-3.9 --version && \ - clang-6.0 --version && \ - clang-10 --version - -# TODO(leezu) switch to clang-tidy 10 -# Use llvm's master version of run-clang-tidy.py. This version has mostly minor updates, but -# importantly will properly return a non-zero exit code when an error is reported in clang-tidy. -# Please remove the below if we install a clang version higher than 6.0. -wget \ - -qO /usr/lib/llvm-6.0/share/clang/run-clang-tidy.py\ - https://raw.githubusercontent.com/llvm-mirror/clang-tools-extra/7654135f0cbd155c285fd2a37d87e27e4fff3071/clang-tidy/tool/run-clang-tidy.py diff --git a/ci/docker/install/ubuntu_clojure.sh b/ci/docker/install/ubuntu_clojure.sh deleted file mode 100755 index dcaae6ba048d..000000000000 --- a/ci/docker/install/ubuntu_clojure.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -# build and install are separated so changes to build don't invalidate -# the whole docker cache for the image - -set -ex -# install libraries for mxnet's clojure package on ubuntu -echo 'Installing Clojure...' - -wget -q https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -chmod 775 lein -sudo cp lein /usr/local/bin -echo "Y" | sudo lein downgrade 2.8.3 diff --git a/ci/docker/install/ubuntu_cudnn.sh b/ci/docker/install/ubuntu_cudnn.sh deleted file mode 100755 index eaf50447305c..000000000000 --- a/ci/docker/install/ubuntu_cudnn.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -# build and install are separated so changes to build don't invalidate -# the whole docker cache for the image - -# Assumes base image is from nvidia/cuda - -set -ex - -if [ -z ${CUDNN_VERSION} ]; then - echo "Error: CUDNN_VERSION environment variable undefiend" - exit 1 -fi - -apt-get update || true - -case ${CUDA_VERSION} in - 10\.2*) - export libcudnn7_version="${CUDNN_VERSION}-1+cuda10.2" - export libcudnn7_dev_version="${CUDNN_VERSION}-1+cuda10.2" - ;; - 10\.1*) - export libcudnn7_version="${CUDNN_VERSION}-1+cuda10.1" - export libcudnn7_dev_version="${CUDNN_VERSION}-1+cuda10.1" - ;; - 10\.0*) - export libcudnn7_version="${CUDNN_VERSION}-1+cuda10.0" - export libcudnn7_dev_version="${CUDNN_VERSION}-1+cuda10.0" - ;; - 9\.0*) - export libcudnn7_version="${CUDNN_VERSION}-1+cuda9.0" - export libcudnn7_dev_version="${CUDNN_VERSION}-1+cuda9.0" - ;; - 9\.2*) - export libcudnn7_version="${CUDNN_VERSION}-1+cuda9.2" - export libcudnn7_dev_version="${CUDNN_VERSION}-1+cuda9.2" - ;; - *) - echo "Unsupported CUDA version ${CUDA_VERSION}" - exit 1 - ;; -esac - -apt-get install -y --allow-downgrades libcudnn7=${libcudnn7_version} libcudnn7-dev=${libcudnn7_dev_version} - diff --git a/ci/docker/install/ubuntu_emscripten.sh b/ci/docker/install/ubuntu_emscripten.sh deleted file mode 100755 index 28ede755f5c7..000000000000 --- a/ci/docker/install/ubuntu_emscripten.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -# build and install are separated so changes to build don't invalidate -# the whole docker cache for the image - -#The script has been copied as is from a dockerfile that existed on previous MXNet versions (0.11) -#Written By: Ly - -set -ex - -apt-get update || true -apt-get -y install nodejs - -git clone -b 1.38.6 https://github.com/kripken/emscripten.git -git clone -b 1.38.6 https://github.com/kripken/emscripten-fastcomp -cd emscripten-fastcomp -git clone -b 1.38.6 https://github.com/kripken/emscripten-fastcomp-clang tools/clang -mkdir build && cd build - -cmake .. -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86;JSBackend" \ --DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DCLANG_INCLUDE_EXAMPLES=OFF \ --DCLANG_INCLUDE_TESTS=OFF && make -j$(nproc) - -chmod -R 777 /work/deps/emscripten-fastcomp/ diff --git a/ci/docker/install/ubuntu_gcc8.sh b/ci/docker/install/ubuntu_gcc8.sh deleted file mode 100755 index e0f2986e101f..000000000000 --- a/ci/docker/install/ubuntu_gcc8.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -sudo add-apt-repository ppa:jonathonf/gcc-8.0 -sudo add-apt-repository ppa:jonathonf/gcc-7.3 -sudo apt-get update || true -sudo apt-get install -y gcc-8 g++-8 gcc-7 g++-7 diff --git a/ci/docker/install/ubuntu_julia.sh b/ci/docker/install/ubuntu_julia.sh deleted file mode 100755 index 435ec46db6c7..000000000000 --- a/ci/docker/install/ubuntu_julia.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -# build and install are separated so changes to build don't invalidate -# the whole docker cache for the image - -set -ex - -function install_julia() { - local suffix=`echo $1 | sed 's/\.//'` # 0.7 -> 07; 1.0 -> 10 - local JLBINARY="julia-$1.tar.gz" - local JULIADIR="/work/julia$suffix" - local JULIA="${JULIADIR}/bin/julia" - - mkdir -p $JULIADIR - # The julia version in Ubuntu repo is too old - # We download the tarball from the official link: - # https://julialang.org/downloads/ - wget -qO $JLBINARY https://julialang-s3.julialang.org/bin/linux/x64/$1/julia-$2-linux-x86_64.tar.gz - tar xzf $JLBINARY -C $JULIADIR --strip 1 - rm $JLBINARY - - $JULIA -e 'using InteractiveUtils; versioninfo()' -} - -install_julia 0.7 0.7.0 -install_julia 1.0 1.0.4 diff --git a/ci/docker/install/ubuntu_nightly_tests.sh b/ci/docker/install/ubuntu_nightly_tests.sh deleted file mode 100755 index c80efed6c377..000000000000 --- a/ci/docker/install/ubuntu_nightly_tests.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -#Install steps for the nightly tests - -set -ex - -# Install for Compilation warning Nightly Test -# Adding ppas frequently fails due to busy gpg servers, retry 5 times with 5 minute delays. -for i in 1 2 3 4 5; do add-apt-repository -y ppa:ubuntu-toolchain-r/test && break || sleep 300; done - -apt-get update || true -apt-get -y install time - -# Install for RAT License Check Nightly Test -apt-get install -y subversion maven -y #>/dev/null - -# Packages needed for the Straight Dope Nightly tests. -pip3 install pandas scikit-image prompt_toolkit diff --git a/ci/docker/install/ubuntu_r.sh b/ci/docker/install/ubuntu_r.sh deleted file mode 100755 index 44ebf7c0799e..000000000000 --- a/ci/docker/install/ubuntu_r.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -# build and install are separated so changes to build don't invalidate -# the whole docker cache for the image - -# Important Maintenance Instructions: -# Align changes with installation instructions in /get_started/ubuntu_setup.md -# Align with R install script: /docs/install/install_mxnet_ubuntu_r.sh - -set -ex -cd "$(dirname "$0")" -# install libraries for mxnet's r package on ubuntu -echo "deb http://cran.rstudio.com/bin/linux/ubuntu trusty/" >> /etc/apt/sources.list - -apt-key add r.gpg - -# Installing the latest version (3.3+) that is compatible with MXNet -add-apt-repository 'deb [arch=amd64,i386] https://cran.rstudio.com/bin/linux/ubuntu xenial/' - -apt-get update || true -apt-get install -y --allow-unauthenticated \ - libcairo2-dev \ - libssl-dev \ - libxml2-dev \ - libxt-dev \ - r-base \ - r-base-dev \ - texinfo \ - texlive \ - texlive-fonts-extra - -# Delete cran repository as it requires --allow-unauthenticated -find /etc/apt -name "*.list" | xargs sed -i 's/.*cran\.rstudio.com.*//' diff --git a/ci/docker/install/ubuntu_rat.sh b/ci/docker/install/ubuntu_rat.sh deleted file mode 100755 index 2c905fc275c7..000000000000 --- a/ci/docker/install/ubuntu_rat.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -set -ex - -echo "Install dependencies" -apt-get update || true -apt-get install -y subversion maven openjdk-8-jdk openjdk-8-jre - -echo "download RAT" -#svn co http://svn.apache.org/repos/asf/creadur/rat/trunk/ -svn co http://svn.apache.org/repos/asf/creadur/rat/branches/0.12-release/ - -echo "cd into directory" -cd 0.12-release - -echo "mvn install" -mvn -Dmaven.test.skip=true install diff --git a/ci/docker/install/ubuntu_scala.sh b/ci/docker/install/ubuntu_scala.sh deleted file mode 100755 index 355e978e075c..000000000000 --- a/ci/docker/install/ubuntu_scala.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -# build and install are separated so changes to build don't invalidate -# the whole docker cache for the image - -set -ex - -apt-get update || true -apt-get install -y \ - openjdk-8-jdk \ - openjdk-8-jre \ - software-properties-common \ - scala \ - maven diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 2f0bf777c464..1e988db11a18 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -58,58 +58,6 @@ EOF fi } -build_ccache_wrappers() { - set -ex - - if [ -z ${CC+x} ]; then - echo "No \$CC set, defaulting to gcc"; - export CC=gcc - fi - if [ -z ${CXX+x} ]; then - echo "No \$CXX set, defaulting to g++"; - export CXX=g++ - fi - - # Recommended by CCache: https://ccache.samba.org/manual.html#_run_modes - # Add to the beginning of path to ensure this redirection is picked up instead - # of the original ones. Especially CUDA/NVCC appends itself to the beginning of the - # path and thus this redirect is ignored. This change fixes this problem - # This hacky approach with symbolic links is required because underlying build - # systems of our submodules ignore our CMake settings. If they use Makefile, - # we can't influence them at all in general and NVCC also prefers to hardcode their - # compiler instead of respecting the settings. Thus, we take this brutal approach - # and just redirect everything of this installer has been called. - # In future, we could do these links during image build time of the container. - # But in the beginning, we'll make this opt-in. In future, loads of processes like - # the scala make step or numpy compilation and other pip package generations - # could be heavily sped up by using ccache as well. - mkdir -p /tmp/ccache-redirects - export PATH=/tmp/ccache-redirects:$PATH - CCACHE=`which ccache` - ln -sf $CCACHE /tmp/ccache-redirects/gcc - ln -sf $CCACHE /tmp/ccache-redirects/gcc-8 - ln -sf $CCACHE /tmp/ccache-redirects/g++ - ln -sf $CCACHE /tmp/ccache-redirects/g++-8 - ln -sf $CCACHE /tmp/ccache-redirects/clang++-3.9 - ln -sf $CCACHE /tmp/ccache-redirects/clang-3.9 - ln -sf $CCACHE /tmp/ccache-redirects/clang++-5.0 - ln -sf $CCACHE /tmp/ccache-redirects/clang-5.0 - ln -sf $CCACHE /tmp/ccache-redirects/clang++-6.0 - ln -sf $CCACHE /tmp/ccache-redirects/clang-6.0 - ln -sf $CCACHE /tmp/ccache-redirects/clang++-10 - ln -sf $CCACHE /tmp/ccache-redirects/clang-10 - #Doesn't work: https://github.com/ccache/ccache/issues/373 - # ln -sf $CCACHE /tmp/ccache-redirects/nvcc - # ln -sf $CCACHE /tmp/ccache-redirects/nvcc - # export NVCC="/tmp/ccache-redirects/nvcc" - - # Uncomment if you would like to debug CCache hit rates. - # You can monitor using tail -f ccache-log - #export CCACHE_LOGFILE=/work/mxnet/ccache-log - #export CCACHE_LOGFILE=/tmp/ccache-log - #export CCACHE_DEBUG=1 -} - build_wheel() { set -ex @@ -514,9 +462,8 @@ build_ubuntu_cpu_clang100() { build_ubuntu_cpu_clang_tidy() { set -ex cd /work/build - export CLANG_TIDY=/usr/lib/llvm-6.0/share/clang/run-clang-tidy.py # TODO(leezu) USE_OPENMP=OFF 3rdparty/dmlc-core/CMakeLists.txt:79 broken? - CXX=clang++-6.0 CC=clang-6.0 cmake \ + CXX=clang++-10 CC=clang-10 cmake \ -DUSE_MKL_IF_AVAILABLE=OFF \ -DUSE_MKLDNN=OFF \ -DUSE_CUDA=OFF \ @@ -524,11 +471,9 @@ build_ubuntu_cpu_clang_tidy() { -DCMAKE_BUILD_TYPE=Debug \ -DUSE_DIST_KVSTORE=ON \ -DUSE_CPP_PACKAGE=ON \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + -DCMAKE_CXX_CLANG_TIDY=clang-tidy-10 \ -G Ninja /work/mxnet ninja - cd /work/mxnet - $CLANG_TIDY -p /work/build -j $(nproc) -clang-tidy-binary clang-tidy-6.0 /work/mxnet/src } build_ubuntu_cpu_clang6_mkldnn() { @@ -596,6 +541,7 @@ build_ubuntu_gpu_tensorrt() { export CC=gcc-7 export CXX=g++-7 + export ONNX_NAMESPACE=onnx # Build ONNX pushd . @@ -604,30 +550,29 @@ build_ubuntu_gpu_tensorrt() { rm -rf build mkdir -p build cd build - cmake \ - -DCMAKE_CXX_FLAGS=-I/usr/include/python${PYVER}\ - -DBUILD_SHARED_LIBS=ON ..\ - -G Ninja - ninja -j 1 -v onnx/onnx.proto - ninja -j 1 -v + cmake -DCMAKE_CXX_FLAGS=-I/usr/include/python${PYVER} -DBUILD_SHARED_LIBS=ON .. + make -j$(nproc) export LIBRARY_PATH=`pwd`:`pwd`/onnx/:$LIBRARY_PATH export CPLUS_INCLUDE_PATH=`pwd`:$CPLUS_INCLUDE_PATH + export CXXFLAGS=-I`pwd` + popd # Build ONNX-TensorRT + export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib + export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:/usr/local/cuda-10.2/targets/x86_64-linux/include/ pushd . cd 3rdparty/onnx-tensorrt/ mkdir -p build cd build - cmake .. + cmake -DONNX_NAMESPACE=$ONNX_NAMESPACE .. make -j$(nproc) export LIBRARY_PATH=`pwd`:$LIBRARY_PATH popd mkdir -p /work/mxnet/lib/ cp 3rdparty/onnx-tensorrt/third_party/onnx/build/*.so /work/mxnet/lib/ - cp -L 3rdparty/onnx-tensorrt/build/libnvonnxparser_runtime.so.0 /work/mxnet/lib/ - cp -L 3rdparty/onnx-tensorrt/build/libnvonnxparser.so.0 /work/mxnet/lib/ + cp -L 3rdparty/onnx-tensorrt/build/libnvonnxparser.so /work/mxnet/lib/ cd /work/build cmake -DUSE_CUDA=1 \ @@ -788,9 +733,24 @@ build_ubuntu_blc() { # Testing sanity_check() { + set -ex + sanity_license + sanity_python + sanity_cpp +} + +sanity_license() { set -ex tools/license_header.py check +} + +sanity_cpp() { + set -ex 3rdparty/dmlc-core/scripts/lint.py mxnet cpp include src plugin tests --exclude_path src/operator/contrib/ctc_include include/mkldnn +} + +sanity_python() { + set -ex python3 -m pylint --rcfile=ci/other/pylintrc --ignore-patterns=".*\.so$$,.*\.dll$$,.*\.dylib$$" python/mxnet OMP_NUM_THREADS=$(expr $(nproc) / 4) pytest -n 4 tests/tutorials/test_sanity_tutorials.py } @@ -1055,15 +1015,15 @@ unittest_ubuntu_python3_arm() { # Functions that run the nightly Tests: #Runs Apache RAT Check on MXNet Source for License Headers -nightly_test_rat_check() { +test_rat_check() { set -e pushd . - cd /work/deps/0.12-release/apache-rat/target + cd /usr/local/src/apache-rat-0.13 # Use shell number 5 to duplicate the log output. It get sprinted and stored in $OUTPUT at the same time https://stackoverflow.com/a/12451419 exec 5>&1 - OUTPUT=$(java -jar apache-rat-0.13-SNAPSHOT.jar -E /work/mxnet/tests/nightly/apache_rat_license_check/rat-excludes -d /work/mxnet|tee >(cat - >&5)) + OUTPUT=$(java -jar apache-rat-0.13.jar -E /work/mxnet/tests/nightly/apache_rat_license_check/rat-excludes -d /work/mxnet|tee >(cat - >&5)) ERROR_MESSAGE="Printing headers for text files without a valid license header" @@ -1175,7 +1135,6 @@ build_ubuntu_cpu_docs() { build_jekyll_docs() { set -ex - source /etc/profile.d/rvm.sh pushd . build_docs_setup diff --git a/ci/docker_cache.py b/ci/docker_cache.py deleted file mode 100644 index 7fb946b53ebc..000000000000 --- a/ci/docker_cache.py +++ /dev/null @@ -1,203 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -""" -Utility to handle distributed docker cache. This is done by keeping the entire image chain of a docker container -on an S3 bucket. This utility allows cache creation and download. After execution, the cache will be in an identical -state as if the container would have been built locally already. -""" - -import argparse -import logging -import os -import subprocess -import sys -from typing import * - -import build as build_util -from docker_login import login_dockerhub, logout_dockerhub -from util import retry - -DOCKER_CACHE_NUM_RETRIES = 3 -DOCKER_CACHE_TIMEOUT_MINS = 45 -PARALLEL_BUILDS = 10 -DOCKER_CACHE_RETRY_SECONDS = 5 - - -def build_save_containers(platforms, registry, load_cache, no_publish) -> int: - """ - Entry point to build and upload all built dockerimages in parallel - :param platforms: List of platforms - :param registry: Docker registry name - :param load_cache: Load cache before building - :return: 1 if error occurred, 0 otherwise - """ - from joblib import Parallel, delayed - if len(platforms) == 0: - return 0 - - platform_results = Parallel(n_jobs=PARALLEL_BUILDS, backend="multiprocessing")( - delayed(_build_save_container)(platform, registry, load_cache, no_publish) - for platform in platforms) - - is_error = False - for platform_result in platform_results: - if platform_result is not None: - logging.error('Failed to generate %s', platform_result) - is_error = True - - return 1 if is_error else 0 - - -def _build_save_container(platform, registry, load_cache, no_publish) -> Optional[str]: - """ - Build image for passed platform and upload the cache to the specified S3 bucket - :param platform: Platform - :param registry: Docker registry name - :param load_cache: Load cache before building - :return: Platform if failed, None otherwise - """ - docker_tag = build_util.get_docker_tag(platform=platform, registry=registry) - # Preload cache - if load_cache: - load_docker_cache(registry=registry, docker_tag=docker_tag) - - # Start building - logging.debug('Building %s as %s', platform, docker_tag) - try: - # Increase the number of retries for building the cache. - image_id = build_util.build_docker(platform=platform, registry=registry, num_retries=10, no_cache=False) - logging.info('Built %s as %s', docker_tag, image_id) - - # Push cache to registry - if not no_publish: - _upload_image(registry=registry, docker_tag=docker_tag, image_id=image_id) - return None - except Exception: - logging.exception('Unexpected exception during build of %s', docker_tag) - return platform - # Error handling is done by returning the errorous platform name. This is necessary due to - # Parallel being unable to handle exceptions - - -def _upload_image(registry, docker_tag, image_id) -> None: - """ - Upload the passed image by id, tag it with docker tag and upload to S3 bucket - :param registry: Docker registry name - :param docker_tag: Docker tag - :param image_id: Image id - :return: None - """ - # We don't have to retag the image since it is already in the right format - logging.info('Uploading %s (%s) to %s', docker_tag, image_id, registry) - push_cmd = ['docker', 'push', docker_tag] - subprocess.check_call(push_cmd) - - -@retry(target_exception=subprocess.TimeoutExpired, tries=DOCKER_CACHE_NUM_RETRIES, - delay_s=DOCKER_CACHE_RETRY_SECONDS) -def load_docker_cache(registry, docker_tag) -> None: - """ - Load the precompiled docker cache from the registry - :param registry: Docker registry name - :param docker_tag: Docker tag to load - :return: None - """ - # We don't have to retag the image since it's already in the right format - if not registry: - return - assert docker_tag - - logging.info('Loading Docker cache for %s from %s', docker_tag, registry) - pull_cmd = ['docker', 'pull', docker_tag] - - # Don't throw an error if the image does not exist - subprocess.run(pull_cmd, timeout=DOCKER_CACHE_TIMEOUT_MINS*60) - logging.info('Successfully pulled docker cache') - - -def delete_local_docker_cache(docker_tag): - """ - Delete the local docker cache for the entire docker image chain - :param docker_tag: Docker tag - :return: None - """ - history_cmd = ['docker', 'history', '-q', docker_tag] - - try: - image_ids_b = subprocess.check_output(history_cmd) - image_ids_str = image_ids_b.decode('utf-8').strip() - layer_ids = [id.strip() for id in image_ids_str.split('\n') if id != ''] - - delete_cmd = ['docker', 'image', 'rm', '--force'] - delete_cmd.extend(layer_ids) - subprocess.check_call(delete_cmd) - except subprocess.CalledProcessError as error: - # Could be caused by the image not being present - logging.debug('Error during local cache deletion %s', error) - - -def main() -> int: - """ - Utility to create and publish the Docker cache to Docker Hub - :return: - """ - # We need to be in the same directory than the script so the commands in the dockerfiles work as - # expected. But the script can be invoked from a different path - base = os.path.split(os.path.realpath(__file__))[0] - os.chdir(base) - - logging.getLogger().setLevel(logging.DEBUG) - logging.getLogger('botocore').setLevel(logging.INFO) - logging.getLogger('boto3').setLevel(logging.INFO) - logging.getLogger('urllib3').setLevel(logging.INFO) - logging.getLogger('s3transfer').setLevel(logging.INFO) - - def script_name() -> str: - return os.path.split(sys.argv[0])[1] - - logging.basicConfig(format='{}: %(asctime)-15s %(message)s'.format(script_name())) - - parser = argparse.ArgumentParser(description="Utility for preserving and loading Docker cache", epilog="") - parser.add_argument("--docker-registry", - help="Docker hub registry name", - type=str, - required=True) - parser.add_argument("--no-publish", help="Only build but don't publish. Used for testing.", - action='store_true') - - args = parser.parse_args() - - platforms = build_util.get_platforms(legacy_only=True) - - secret_name = os.environ['DOCKERHUB_SECRET_NAME'] - endpoint_url = os.environ['DOCKERHUB_SECRET_ENDPOINT_URL'] - region_name = os.environ['DOCKERHUB_SECRET_ENDPOINT_REGION'] - - try: - if not args.no_publish: - login_dockerhub(secret_name, endpoint_url, region_name) - return build_save_containers(platforms=platforms, registry=args.docker_registry, load_cache=True, no_publish=args.no_publish) - finally: - logout_dockerhub() - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/ci/docker_cache_requirements b/ci/docker_cache_requirements deleted file mode 100644 index d1272cb348c7..000000000000 --- a/ci/docker_cache_requirements +++ /dev/null @@ -1,24 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -boto3==1.7.13 -botocore==1.10.13 -docutils==0.14 -jmespath==0.9.3 -joblib==0.11 -python-dateutil==2.7.2 -s3transfer==0.1.13 -six==1.11.0 diff --git a/ci/jenkins/Jenkins_steps.groovy b/ci/jenkins/Jenkins_steps.groovy index f247ccb54fd6..e2b0b04dea41 100644 --- a/ci/jenkins/Jenkins_steps.groovy +++ b/ci/jenkins/Jenkins_steps.groovy @@ -278,7 +278,7 @@ def compile_unix_tensorrt_gpu(lib_name) { ws('workspace/build-tensorrt') { timeout(time: max_time, unit: 'MINUTES') { utils.init_git() - utils.docker_run('ubuntu_gpu_tensorrt', 'build_ubuntu_gpu_tensorrt', false) + utils.docker_run('ubuntu_gpu_cu102', 'build_ubuntu_gpu_tensorrt', false) utils.pack_lib(lib_name, mx_tensorrt_lib) } } @@ -1228,7 +1228,7 @@ def sanity_rat_license() { node(NODE_LINUX_CPU) { ws('workspace/sanity-rat') { utils.init_git() - utils.docker_run('ubuntu_rat', 'nightly_test_rat_check', false) + utils.docker_run('ubuntu_cpu', 'test_rat_check', false) } } }] @@ -1250,7 +1250,6 @@ def misc_test_docker_cache_build() { node(NODE_LINUX_CPU) { ws('workspace/docker_cache') { utils.init_git() - sh "python3 ./ci/docker_cache.py --docker-registry ${env.DOCKER_CACHE_REGISTRY} --no-publish" sh "cd ci && docker-compose -f docker/docker-compose.yml pull && docker-compose -f docker/docker-compose.yml build --parallel" } } diff --git a/ci/test_docker_cache.py b/ci/test_docker_cache.py deleted file mode 100644 index 81b315be4cff..000000000000 --- a/ci/test_docker_cache.py +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -""" -Distributed Docker cache tests -""" - -import unittest.mock -import tempfile -import os -import logging -import subprocess -import sys -from unittest.mock import MagicMock - -sys.path.append(os.path.dirname(__file__)) -import docker_cache -import build as build_util - -DOCKERFILE_DIR = 'docker' -DOCKER_REGISTRY_NAME = 'test_registry' -DOCKER_REGISTRY_PORT = 5000 -DOCKER_REGISTRY_PATH = 'localhost:{}'.format(DOCKER_REGISTRY_PORT) - -class RedirectSubprocessOutput(object): - """ - Redirect the output of all subprocess.call calls to a readable buffer instead of writing it to stdout/stderr. - The output can then be retrieved with get_output. - """ - def __enter__(self): - self.buf_output = tempfile.TemporaryFile() - - def trampoline(*popenargs, **kwargs): - self.call(*popenargs, **kwargs) - - self.old_method = subprocess.call - subprocess.call = trampoline - return self - - def __exit__(self, *args): - logging.info('Releasing docker output buffer:\n%s', self.get_output()) - subprocess.call = self.old_method - self.buf_output.close() - - def call(self, *popenargs, **kwargs): - """ - Replace subprocess.call - :param popenargs: - :param timeout: - :param kwargs: - :return: - """ - kwargs['stderr'] = subprocess.STDOUT - kwargs['stdout'] = self.buf_output - return self.old_method(*popenargs, **kwargs) - - def get_output(self): - self.buf_output.seek(0) - return self.buf_output.read().decode('utf-8') - - -class TestDockerCache(unittest.TestCase): - """ - Test utility class - """ - def setUp(self): - logging.getLogger().setLevel(logging.DEBUG) - - # We need to be in the same directory than the script so the commands in the dockerfiles work as - # expected. But the script can be invoked from a different path - base = os.path.split(os.path.realpath(__file__))[0] - os.chdir(base) - - docker_cache.login_dockerhub = MagicMock() # Override login - - # Stop in case previous execution was dirty - try: - self._stop_local_docker_registry() - except Exception: - pass - - # Start up docker registry - self._start_local_docker_registry() - - def tearDown(self): - # Stop docker registry - self._stop_local_docker_registry() - - @classmethod - def _start_local_docker_registry(cls): - # https://docs.docker.com/registry/deploying/#run-a-local-registrys - start_cmd = [ - 'docker', 'run', '-d', '-p', '{}:{}'.format(DOCKER_REGISTRY_PORT, DOCKER_REGISTRY_PORT), - '--name', DOCKER_REGISTRY_NAME, 'registry:2' - ] - subprocess.check_call(start_cmd) - - @classmethod - def _stop_local_docker_registry(cls): - # https://docs.docker.com/registry/deploying/#run-a-local-registry - stop_cmd = ['docker', 'container', 'stop', DOCKER_REGISTRY_NAME] - subprocess.check_call(stop_cmd) - - clean_cmd = ['docker', 'container', 'rm', '-v', DOCKER_REGISTRY_NAME] - subprocess.check_call(clean_cmd) - - def test_full_cache(self): - """ - Test whether it's possible to restore cache entirely - :return: - """ - dockerfile_content = """ - FROM busybox - RUN touch ~/file1 - RUN touch ~/file2 - RUN touch ~/file3 - RUN touch ~/file4 - """ - platform = 'test_full_cache' - docker_tag = build_util.get_docker_tag(platform=platform, registry=DOCKER_REGISTRY_PATH) - dockerfile_path = os.path.join(DOCKERFILE_DIR, 'Dockerfile.build.' + platform) - try: - with open(dockerfile_path, 'w') as dockerfile_handle: - dockerfile_handle.write(dockerfile_content) - - # Warm up - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - def warm_up_lambda_func(): - build_util.build_docker( - docker_binary='docker', - platform=platform, - registry=DOCKER_REGISTRY_PATH, - num_retries=3, - no_cache=False - ) - _assert_docker_build(lambda_func=warm_up_lambda_func, expected_cache_hit_count=0, - expected_cache_miss_count=4) - - # Assert local cache is properly primed - def primed_cache_lambda_func(): - build_util.build_docker( - docker_binary='docker', - platform=platform, - registry=DOCKER_REGISTRY_PATH, - num_retries=3, - no_cache=False - ) - _assert_docker_build(lambda_func=primed_cache_lambda_func, expected_cache_hit_count=4, - expected_cache_miss_count=0) - - # Upload and clean local cache - docker_cache.build_save_containers(platforms=[platform], registry=DOCKER_REGISTRY_PATH, load_cache=False) - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - # Build with clean local cache and cache loading enabled - def clean_cache_lambda_func(): - docker_cache.build_save_containers( - platforms=[platform], registry=DOCKER_REGISTRY_PATH, load_cache=True) - _assert_docker_build(lambda_func=clean_cache_lambda_func, expected_cache_hit_count=4, - expected_cache_miss_count=0) - finally: - # Delete dockerfile - os.remove(dockerfile_path) - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - def test_partial_cache(self): - """ - Test whether it's possible to restore cache and then pit it up partially by using a Dockerfile which shares - some parts - :return: - """ - # These two dockerfiles diverge at the fourth RUN statement. Their common parts (1-3) should be re-used - dockerfile_content_1 = """ - FROM busybox - RUN touch ~/file1 - RUN touch ~/file2 - RUN touch ~/file3 - RUN touch ~/file4 - """ - dockerfile_content_2 = """ - FROM busybox - RUN touch ~/file1 - RUN touch ~/file2 - RUN touch ~/file3 - RUN touch ~/file5 - RUN touch ~/file4 - RUN touch ~/file6 - """ - platform = 'test_partial_cache' - docker_tag = build_util.get_docker_tag(platform=platform, registry=DOCKER_REGISTRY_PATH) - dockerfile_path = os.path.join(DOCKERFILE_DIR, 'Dockerfile.build.' + platform) - try: - # Write initial Dockerfile - with open(dockerfile_path, 'w') as dockerfile_handle: - dockerfile_handle.write(dockerfile_content_1) - - # Warm up - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - def warm_up_lambda_func(): - build_util.build_docker( - docker_binary='docker', - platform=platform, - registry=DOCKER_REGISTRY_PATH, - num_retries=3, - no_cache=False - ) - _assert_docker_build(lambda_func=warm_up_lambda_func, expected_cache_hit_count=0, - expected_cache_miss_count=4) - - # Assert local cache is properly primed - def primed_cache_lambda_func(): - build_util.build_docker( - docker_binary='docker', - platform=platform, - registry=DOCKER_REGISTRY_PATH, - num_retries=3, - no_cache=False - ) - _assert_docker_build(lambda_func=primed_cache_lambda_func, expected_cache_hit_count=4, - expected_cache_miss_count=0) - - # Upload and clean local cache - docker_cache.build_save_containers(platforms=[platform], registry=DOCKER_REGISTRY_PATH, load_cache=False) - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - # Replace Dockerfile with the second one, resulting in a partial cache hit - with open(dockerfile_path, 'w') as dockerfile_handle: - dockerfile_handle.write(dockerfile_content_2) - - # Test if partial cache is properly hit. It will attempt to load the cache from the first Dockerfile, - # resulting in a partial hit - def partial_cache_lambda_func(): - docker_cache.build_save_containers( - platforms=[platform], registry=DOCKER_REGISTRY_PATH, load_cache=True) - _assert_docker_build(lambda_func=partial_cache_lambda_func, expected_cache_hit_count=3, - expected_cache_miss_count=3) - - finally: - # Delete dockerfile - os.remove(dockerfile_path) - docker_cache.delete_local_docker_cache(docker_tag=docker_tag) - - -def _assert_docker_build(lambda_func, expected_cache_hit_count: int, expected_cache_miss_count: int): - with RedirectSubprocessOutput() as redirected_output: - lambda_func() - output = redirected_output.get_output() - assert output.count('Running in') == expected_cache_miss_count, \ - 'Expected {} "Running in", got {}. Log:{}'.\ - format(expected_cache_miss_count, output.count('Running in'), output) - assert output.count('Using cache') == expected_cache_hit_count, \ - 'Expected {} "Using cache", got {}. Log:{}'.\ - format(expected_cache_hit_count, output.count('Using cache'), output) diff --git a/ci/windows/test_jl07_cpu.ps1 b/ci/windows/test_jl07_cpu.ps1 deleted file mode 100644 index 4924957ddb68..000000000000 --- a/ci/windows/test_jl07_cpu.ps1 +++ /dev/null @@ -1,56 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -7z x -y windows_package.7z - -# set default output encoding to utf8 -$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8' - -$env:MXNET_HOME = [System.IO.Path]::GetFullPath('.\windows_package') -$env:JULIA_URL = "https://julialang-s3.julialang.org/bin/winnt/x64/0.7/julia-0.7.0-win64.exe" -$env:JULIA_DEPOT_PATH = [System.IO.Path]::GetFullPath('.\julia-depot') - -$JULIA_DIR = [System.IO.Path]::GetFullPath('.\julia07') -$JULIA = "$JULIA_DIR\bin\julia" - -# Download most recent Julia Windows binary -[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -(New-Object System.Net.WebClient).DownloadFile($env:JULIA_URL, "julia-binary.exe") -if ($LastExitCode -ne 0) { Throw ("Error on downloading Julia Windows binary") } - -# Run installer silently, output to C:\julia07\julia -Start-Process -Wait "julia-binary.exe" -ArgumentList "/S /D=$JULIA_DIR" -if ($LastExitCode -ne 0) { Throw ("Error on installing Julia") } - -& $JULIA -e "using InteractiveUtils; versioninfo()" - -dir - -$src=' - using Pkg - Pkg.activate(".\\julia") - Pkg.build() - Pkg.test() -' - -$src > .\ci-build.jl - -# Redirect all stderr output to stdout, -# since Julia loggers output stuffs to stderr. -# Then, stderr triggers powershell NativeCommandError. -& $JULIA .\ci-build.jl 2>&1 | %{ "$_" } -if ($LastExitCode -eq 1) { Throw ("Error") } diff --git a/ci/windows/test_jl10_cpu.ps1 b/ci/windows/test_jl10_cpu.ps1 deleted file mode 100644 index b54b11a8a8ab..000000000000 --- a/ci/windows/test_jl10_cpu.ps1 +++ /dev/null @@ -1,56 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -7z x -y windows_package.7z - -# set default output encoding to utf8 -$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8' - -$env:MXNET_HOME = [System.IO.Path]::GetFullPath('.\windows_package') -$env:JULIA_URL = "https://julialang-s3.julialang.org/bin/winnt/x64/1.0/julia-1.0.3-win64.exe" -$env:JULIA_DEPOT_PATH = [System.IO.Path]::GetFullPath('.\julia-depot') - -$JULIA_DIR = [System.IO.Path]::GetFullPath('.\julia10') -$JULIA = "$JULIA_DIR\bin\julia" - -# Download most recent Julia Windows binary -[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -(New-Object System.Net.WebClient).DownloadFile($env:JULIA_URL, "julia-binary.exe") -if ($LastExitCode -ne 0) { Throw ("Error on downloading Julia Windows binary") } - -# Run installer silently, output to C:\julia10\julia -Start-Process -Wait "julia-binary.exe" -ArgumentList "/S /D=$JULIA_DIR" -if ($LastExitCode -ne 0) { Throw ("Error on installing Julia") } - -& $JULIA -e "using InteractiveUtils; versioninfo()" - -dir - -$src=' - using Pkg - Pkg.activate(".\\julia") - Pkg.build() - Pkg.test() -' - -$src > .\ci-build.jl - -# Redirect all stderr output to stdout, -# since Julia loggers output stuffs to stderr. -# Then, stderr triggers powershell NativeCommandError. -& $JULIA .\ci-build.jl 2>&1 | %{ "$_" } -if ($LastExitCode -eq 1) { Throw ("Error") } diff --git a/config/darwin.cmake b/config/darwin.cmake index a65509f0ba1c..12fd034c07c9 100644 --- a/config/darwin.cmake +++ b/config/darwin.cmake @@ -128,3 +128,4 @@ set(USE_NCCL "Use NVidia NCCL with CUDA" OFF) set(NCCL_ROOT "" CACHE BOOL "NCCL install path. Supports autodetection.") set(ENABLE_CUDA_RTC ON CACHE BOOL "Build with CUDA runtime compilation support") set(USE_NVTX ON CACHE BOOL "Build with NVTX support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/distribution/darwin_cpu.cmake b/config/distribution/darwin_cpu.cmake index 790e18320157..f44e004eb420 100644 --- a/config/distribution/darwin_cpu.cmake +++ b/config/distribution/darwin_cpu.cmake @@ -31,3 +31,5 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/distribution/linux_cpu.cmake b/config/distribution/linux_cpu.cmake index 15b4f5aa7e59..83bb1b07f53e 100644 --- a/config/distribution/linux_cpu.cmake +++ b/config/distribution/linux_cpu.cmake @@ -29,3 +29,5 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/distribution/linux_cu100.cmake b/config/distribution/linux_cu100.cmake index 457a14f89a32..b787c0666a4c 100644 --- a/config/distribution/linux_cu100.cmake +++ b/config/distribution/linux_cu100.cmake @@ -31,6 +31,8 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-10.0/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_cu101.cmake b/config/distribution/linux_cu101.cmake index 61089200f31f..298b2a5e21e2 100644 --- a/config/distribution/linux_cu101.cmake +++ b/config/distribution/linux_cu101.cmake @@ -33,6 +33,8 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-10.1/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_cu102.cmake b/config/distribution/linux_cu102.cmake index 9701b99a6a1f..80ef2320d599 100644 --- a/config/distribution/linux_cu102.cmake +++ b/config/distribution/linux_cu102.cmake @@ -31,6 +31,8 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-10.2/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_cu92.cmake b/config/distribution/linux_cu92.cmake index 8499421f91ec..4c767a2cc839 100644 --- a/config/distribution/linux_cu92.cmake +++ b/config/distribution/linux_cu92.cmake @@ -31,6 +31,7 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-9.2/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_native.cmake b/config/distribution/linux_native.cmake index 09fb4956ae80..1be84ac79937 100644 --- a/config/distribution/linux_native.cmake +++ b/config/distribution/linux_native.cmake @@ -29,3 +29,4 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator build system.") set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/linux.cmake b/config/linux.cmake index 84eecc2e9701..9104da142e63 100644 --- a/config/linux.cmake +++ b/config/linux.cmake @@ -127,3 +127,4 @@ set(USE_NCCL "Use NVidia NCCL with CUDA" OFF) set(NCCL_ROOT "" CACHE BOOL "NCCL install path. Supports autodetection.") set(ENABLE_CUDA_RTC ON CACHE BOOL "Build with CUDA runtime compilation support") set(USE_NVTX ON CACHE BOOL "Build with NVTX support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/linux_gpu.cmake b/config/linux_gpu.cmake index 0dad43332978..baef45e4157b 100644 --- a/config/linux_gpu.cmake +++ b/config/linux_gpu.cmake @@ -127,3 +127,4 @@ set(USE_NCCL "Use NVidia NCCL with CUDA" OFF) set(NCCL_ROOT "" CACHE BOOL "NCCL install path. Supports autodetection.") set(ENABLE_CUDA_RTC ON CACHE BOOL "Build with CUDA runtime compilation support") set(USE_NVTX ON CACHE BOOL "Build with NVTX support") +set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/docs/README.md b/docs/README.md index cd78c94b03c4..45624562f9a0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -30,7 +30,7 @@ Each language documentation is built in a modular way, so that if you are a cont You can also use the project's CI tools to emulate any changes with Docker. You can use these tools to install dependencies and run the parts of the build you want to test. -Refer to the [MXNet Developer Wiki](https://cwiki.apache.org/confluence/display/MXNET/Building+the+New+Website) for instructions on building the docs locally. +Refer to the [MXNet Developer Wiki](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=125309983) for instructions on building the docs locally. If you plan to contribute changes to the documentation or website, please submit a pull request. Contributions are welcome! diff --git a/docs/python_docs/_static/mxnet.css b/docs/python_docs/_static/mxnet.css index 7d4f7f115424..0aec931f4314 100644 --- a/docs/python_docs/_static/mxnet.css +++ b/docs/python_docs/_static/mxnet.css @@ -19,10 +19,6 @@ visibility: hidden; } -.document .page-content { - padding: 0 10% !important; -} - .mdl-layout__header--waterfall.is-casting-shadow { box-shadow: none !important; } @@ -53,7 +49,7 @@ } .mdl-layout__header-row { - height: 84px !important; + height: 80px !important; } .mdl-shadow--2dp { @@ -203,4 +199,8 @@ p { float: right; margin: 4px; cursor: pointer; -} \ No newline at end of file +} + +.scrollUp { + transform: translateY(-80px); +} diff --git a/docs/python_docs/python/api/gluon/index.rst b/docs/python_docs/python/api/gluon/index.rst index c74500efe61e..8a8b42549ce8 100644 --- a/docs/python_docs/python/api/gluon/index.rst +++ b/docs/python_docs/python/api/gluon/index.rst @@ -97,7 +97,7 @@ Training Loss functions for training neural networks. .. card:: - :title: mxnet.metric + :title: gluon.metric :link: metric/index.html Metrics to evaluate the performance of a learned model. diff --git a/docs/python_docs/python/api/mxnet/executor_manager/index.rst b/docs/python_docs/python/api/gluon/metric/index.rst similarity index 90% rename from docs/python_docs/python/api/mxnet/executor_manager/index.rst rename to docs/python_docs/python/api/gluon/metric/index.rst index 2be59bdce8a5..8c535973035d 100644 --- a/docs/python_docs/python/api/mxnet/executor_manager/index.rst +++ b/docs/python_docs/python/api/gluon/metric/index.rst @@ -15,9 +15,9 @@ specific language governing permissions and limitations under the License. -mxnet.executor_manager -====================== +gluon.metric +============ -.. automodule:: mxnet.executor_manager +.. automodule:: mxnet.gluon.metric :members: :autosummary: diff --git a/docs/python_docs/python/api/index.rst b/docs/python_docs/python/api/index.rst index 7340eab84a78..0fd831d431c3 100644 --- a/docs/python_docs/python/api/index.rst +++ b/docs/python_docs/python/api/index.rst @@ -182,13 +182,6 @@ Advanced modules Engine properties management. - .. card:: - :title: mxnet.executor_manager - :link: mxnet/executor_manager/index.html - - Executor manager - - .. card:: :title: mxnet.rtc :link: mxnet/rtc/index.html diff --git a/docs/python_docs/python/api/mxnet/index.rst b/docs/python_docs/python/api/mxnet/index.rst index 96f20e683818..def5e276c110 100644 --- a/docs/python_docs/python/api/mxnet/index.rst +++ b/docs/python_docs/python/api/mxnet/index.rst @@ -32,7 +32,6 @@ mxnet mxnet.contrib mxnet.engine mxnet.executor - mxnet.executor_manager mxnet.gluon mxnet.image mxnet.initializer diff --git a/docs/python_docs/python/tutorials/getting-started/crash-course/1-ndarray.md b/docs/python_docs/python/tutorials/getting-started/crash-course/1-ndarray.md index 453cc35264c1..52835b4451f3 100644 --- a/docs/python_docs/python/tutorials/getting-started/crash-course/1-ndarray.md +++ b/docs/python_docs/python/tutorials/getting-started/crash-course/1-ndarray.md @@ -17,7 +17,7 @@ # Step 1: Manipulate data with NP on MXNet -This getting started exercise introduces the `np` package, which is similar to Numpy. For more information, please see [Differences between NP on MXNet and NumPy](/api/python/docs/tutorials/getting-started/deepnumpy/deepnumpy-vs-numpy.html). +This getting started exercise introduces the `np` package, which is similar to Numpy. For more information, please see [Differences between NP on MXNet and NumPy](/api/python/docs/tutorials/getting-started/np/np-vs-numpy.html). ## Import packages and create an array diff --git a/docs/python_docs/python/tutorials/getting-started/crash-course/6-use_gpus.md b/docs/python_docs/python/tutorials/getting-started/crash-course/6-use_gpus.md index 1e60d5f929b9..6f9cc5d3c1d9 100644 --- a/docs/python_docs/python/tutorials/getting-started/crash-course/6-use_gpus.md +++ b/docs/python_docs/python/tutorials/getting-started/crash-course/6-use_gpus.md @@ -148,4 +148,4 @@ for epoch in range(10): ## Next steps Now you have completed training and predicting with a neural network by using NP on MXNet and -Gluon. You can check the guides to these two front ends: [What is NP on MXNet](../deepnumpy/index.html) and [gluon](../gluon_from_experiment_to_deployment.md). +Gluon. You can check the guides to these two front ends: [What is NP on MXNet](../np/index.html) and [gluon](../gluon_from_experiment_to_deployment.md). diff --git a/docs/python_docs/python/tutorials/getting-started/index.rst b/docs/python_docs/python/tutorials/getting-started/index.rst index 709ee0314b9d..dce53ee01319 100644 --- a/docs/python_docs/python/tutorials/getting-started/index.rst +++ b/docs/python_docs/python/tutorials/getting-started/index.rst @@ -30,7 +30,7 @@ The following tutorials teach how to use MXNet. .. card:: :title: What is NP on MXNet - :link: deepnumpy/index.html + :link: np/index.html What is NP on MXNet @@ -63,7 +63,7 @@ The following tutorials teach how to use MXNet. :maxdepth: 2 crash-course/index - deepnumpy/index + np/index to-mxnet/index gluon_from_experiment_to_deployment logistic_regression_explained.md diff --git a/docs/python_docs/python/tutorials/getting-started/deepnumpy/cheat-sheet.md b/docs/python_docs/python/tutorials/getting-started/np/cheat-sheet.md similarity index 100% rename from docs/python_docs/python/tutorials/getting-started/deepnumpy/cheat-sheet.md rename to docs/python_docs/python/tutorials/getting-started/np/cheat-sheet.md diff --git a/docs/python_docs/python/tutorials/getting-started/deepnumpy/index.rst b/docs/python_docs/python/tutorials/getting-started/np/index.rst similarity index 98% rename from docs/python_docs/python/tutorials/getting-started/deepnumpy/index.rst rename to docs/python_docs/python/tutorials/getting-started/np/index.rst index cd56ac46c869..3f1da88072a7 100644 --- a/docs/python_docs/python/tutorials/getting-started/deepnumpy/index.rst +++ b/docs/python_docs/python/tutorials/getting-started/np/index.rst @@ -29,4 +29,4 @@ If this is your first time using NP on MXNet, we recommend that you review the f :maxdepth: 1 cheat-sheet - deepnumpy-vs-numpy \ No newline at end of file + np-vs-numpy \ No newline at end of file diff --git a/docs/python_docs/python/tutorials/getting-started/deepnumpy/deepnumpy-vs-numpy.md b/docs/python_docs/python/tutorials/getting-started/np/np-vs-numpy.md similarity index 100% rename from docs/python_docs/python/tutorials/getting-started/deepnumpy/deepnumpy-vs-numpy.md rename to docs/python_docs/python/tutorials/getting-started/np/np-vs-numpy.md diff --git a/docs/python_docs/python/tutorials/index.rst b/docs/python_docs/python/tutorials/index.rst index 70f60c3c61a5..dcc5ea6dbfd6 100644 --- a/docs/python_docs/python/tutorials/index.rst +++ b/docs/python_docs/python/tutorials/index.rst @@ -48,11 +48,10 @@ Packages & Modules MXNet's imperative interface for Python. If you're new to MXNet, start here! .. card:: - :title: NDArray API - :link: packages/ndarray/index.html + :title: np.ndarray API + :link: packages/np/index.html - How to use the NDArray API to manipulate data. - A useful set of tutorials for beginners. + This section contains the `mxnet.np` API reference documentation. .. card:: :title: Symbol API diff --git a/docs/python_docs/python/tutorials/packages/index.rst b/docs/python_docs/python/tutorials/packages/index.rst index 370028a919d1..b14b884809a0 100644 --- a/docs/python_docs/python/tutorials/packages/index.rst +++ b/docs/python_docs/python/tutorials/packages/index.rst @@ -91,6 +91,12 @@ Shared APIs How to use the optimizers. + .. card:: + :title: NP on MXNet reference + :link: np/index.html + + This section contains the mxnet.np API reference documentation. + .. toctree:: :hidden: :glob: diff --git a/docs/python_docs/python/tutorials/packages/ndarray/index.rst b/docs/python_docs/python/tutorials/packages/ndarray/index.rst index 74562357dc58..5fb5e5d1d94f 100644 --- a/docs/python_docs/python/tutorials/packages/ndarray/index.rst +++ b/docs/python_docs/python/tutorials/packages/ndarray/index.rst @@ -45,10 +45,6 @@ NDArray For Sparse NDArray tutorials - .. card:: - :title: NP on MXNet reference - :link: deepnumpy/index.html - This section contains the mxnet.np API reference documentation .. toctree:: @@ -57,4 +53,3 @@ NDArray * sparse/index - deepnumpy/index \ No newline at end of file diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.indexing.rst b/docs/python_docs/python/tutorials/packages/np/arrays.indexing.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.indexing.rst rename to docs/python_docs/python/tutorials/packages/np/arrays.indexing.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.ndarray.rst b/docs/python_docs/python/tutorials/packages/np/arrays.ndarray.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.ndarray.rst rename to docs/python_docs/python/tutorials/packages/np/arrays.ndarray.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.rst b/docs/python_docs/python/tutorials/packages/np/arrays.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/arrays.rst rename to docs/python_docs/python/tutorials/packages/np/arrays.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/index.rst b/docs/python_docs/python/tutorials/packages/np/index.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/index.rst rename to docs/python_docs/python/tutorials/packages/np/index.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/npx.rst b/docs/python_docs/python/tutorials/packages/np/npx.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/npx.rst rename to docs/python_docs/python/tutorials/packages/np/npx.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/random/index.rst b/docs/python_docs/python/tutorials/packages/np/random/index.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/random/index.rst rename to docs/python_docs/python/tutorials/packages/np/random/index.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.array-creation.rst b/docs/python_docs/python/tutorials/packages/np/routines.array-creation.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.array-creation.rst rename to docs/python_docs/python/tutorials/packages/np/routines.array-creation.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.array-manipulation.rst b/docs/python_docs/python/tutorials/packages/np/routines.array-manipulation.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.array-manipulation.rst rename to docs/python_docs/python/tutorials/packages/np/routines.array-manipulation.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.io.rst b/docs/python_docs/python/tutorials/packages/np/routines.io.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.io.rst rename to docs/python_docs/python/tutorials/packages/np/routines.io.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.linalg.rst b/docs/python_docs/python/tutorials/packages/np/routines.linalg.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.linalg.rst rename to docs/python_docs/python/tutorials/packages/np/routines.linalg.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.math.rst b/docs/python_docs/python/tutorials/packages/np/routines.math.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.math.rst rename to docs/python_docs/python/tutorials/packages/np/routines.math.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.rst b/docs/python_docs/python/tutorials/packages/np/routines.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.rst rename to docs/python_docs/python/tutorials/packages/np/routines.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.sort.rst b/docs/python_docs/python/tutorials/packages/np/routines.sort.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.sort.rst rename to docs/python_docs/python/tutorials/packages/np/routines.sort.rst diff --git a/docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.statistics.rst b/docs/python_docs/python/tutorials/packages/np/routines.statistics.rst similarity index 100% rename from docs/python_docs/python/tutorials/packages/ndarray/deepnumpy/routines.statistics.rst rename to docs/python_docs/python/tutorials/packages/np/routines.statistics.rst diff --git a/docs/python_docs/themes/mx-theme/mxtheme/layout.html b/docs/python_docs/themes/mx-theme/mxtheme/layout.html index 994da38fa29e..1e94b28f8fd5 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/layout.html +++ b/docs/python_docs/themes/mx-theme/mxtheme/layout.html @@ -67,10 +67,12 @@ '_static/feedback.css', ] %} - {%- block header %} - - - {% endblock %} +{% set script_files = script_files + [ + '_static/sphinx_materialdesign_theme.js' + ] +%} + +{%- block header %}{% endblock %} {%- block relbar1 %}{% endblock %} {%- block relbar2 %}{% include "relations.html" %}{% endblock %} {%- block sidebar2 %}{% endblock %} diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css index c729ff125e33..dca3a3453ea1 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css @@ -1,2 +1,2 @@ -.admonition,.mdl-shadow--2dp,.page-content pre:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-shadow--24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.14),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.2)}.mdl-data-table,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr{position:relative;height:48px;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color}.mdl-data-table tbody tr.is-selected,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{padding:0 18px 12px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:last-of-type{padding-right:24px}.mdl-data-table td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td{position:relative;vertical-align:middle;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td .mdl-data-table__select{vertical-align:middle}.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdl-data-table th.mdl-data-table__header--sorted-descending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdl-data-table th.mdl-data-table__header--sorted-ascending:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:16px;content:"\e5d8";margin-right:5px;vertical-align:sub}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover{cursor:pointer}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{content:"\e5db"}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{text-align:left}.mdl-mini-footer{display:flex;flex-flow:row wrap;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:"";display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul{display:flex;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-card{display:flex;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:#ff6e40;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{align-items:center;color:#000;display:block;display:flex;justify-content:stretch;line-height:normal;padding:16px;perspective-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{align-self:flex-end;color:inherit;display:block;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:rgba(0,0,0,.54);margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:1rem;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__supporting-text.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-button{background:transparent;border:none;border-radius:2px;color:#000;position:relative;height:36px;margin:0;min-width:64px;padding:0 16px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;line-height:1;letter-spacing:0;overflow:hidden;will-change:box-shadow;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdl-button.mdl-button--colored{color:#2196f3}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:hsla(0,0%,62%,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised.mdl-button--colored{background:#2196f3;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#2196f3}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:hsla(0,0%,62%,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.admonition.attention .mdl-button--fab .admonition-title:before,.admonition.caution .mdl-button--fab .admonition-title:before,.admonition.danger .mdl-button--fab .admonition-title:before,.admonition.error .mdl-button--fab .admonition-title:before,.admonition.hint .mdl-button--fab .admonition-title:before,.admonition.important .mdl-button--fab .admonition-title:before,.admonition.note .mdl-button--fab .admonition-title:before,.admonition.seealso .mdl-button--fab .admonition-title:before,.admonition.tip .mdl-button--fab .admonition-title:before,.admonition.warning .mdl-button--fab .admonition-title:before,.mdl-button--fab .admonition.attention .admonition-title:before,.mdl-button--fab .admonition.caution .admonition-title:before,.mdl-button--fab .admonition.danger .admonition-title:before,.mdl-button--fab .admonition.error .admonition-title:before,.mdl-button--fab .admonition.hint .admonition-title:before,.mdl-button--fab .admonition.important .admonition-title:before,.mdl-button--fab .admonition.note .admonition-title:before,.mdl-button--fab .admonition.seealso .admonition-title:before,.mdl-button--fab .admonition.tip .admonition-title:before,.mdl-button--fab .admonition.warning .admonition-title:before,.mdl-button--fab .material-icons,.mdl-button--fab a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab.mdl-button--colored{background:#ff6e40;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff6e40}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.admonition.attention .mdl-button--icon .admonition-title:before,.admonition.caution .mdl-button--icon .admonition-title:before,.admonition.danger .mdl-button--icon .admonition-title:before,.admonition.error .mdl-button--icon .admonition-title:before,.admonition.hint .mdl-button--icon .admonition-title:before,.admonition.important .mdl-button--icon .admonition-title:before,.admonition.note .mdl-button--icon .admonition-title:before,.admonition.seealso .mdl-button--icon .admonition-title:before,.admonition.tip .mdl-button--icon .admonition-title:before,.admonition.warning .mdl-button--icon .admonition-title:before,.mdl-button--icon .admonition.attention .admonition-title:before,.mdl-button--icon .admonition.caution .admonition-title:before,.mdl-button--icon .admonition.danger .admonition-title:before,.mdl-button--icon .admonition.error .admonition-title:before,.mdl-button--icon .admonition.hint .admonition-title:before,.mdl-button--icon .admonition.important .admonition-title:before,.mdl-button--icon .admonition.note .admonition-title:before,.mdl-button--icon .admonition.seealso .admonition-title:before,.mdl-button--icon .admonition.tip .admonition-title:before,.mdl-button--icon .admonition.warning .admonition-title:before,.mdl-button--icon .material-icons,.mdl-button--icon a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.admonition.attention .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.caution .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.danger .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.error .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.hint .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.important .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.note .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.seealso .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.tip .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.warning .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.attention .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.caution .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.danger .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.error .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.hint .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.important .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.note .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.seealso .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.tip .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.warning .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .material-icons,.mdl-button--icon.mdl-button--mini-icon a.download:before{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#2196f3}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#2196f3}.mdl-button--accent.mdl-button--accent{color:#ff6e40}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff6e40}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:default;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:none}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.admonition.attention .mdl-button .admonition-title:before,.admonition.caution .mdl-button .admonition-title:before,.admonition.danger .mdl-button .admonition-title:before,.admonition.error .mdl-button .admonition-title:before,.admonition.hint .mdl-button .admonition-title:before,.admonition.important .mdl-button .admonition-title:before,.admonition.note .mdl-button .admonition-title:before,.admonition.seealso .mdl-button .admonition-title:before,.admonition.tip .mdl-button .admonition-title:before,.admonition.warning .mdl-button .admonition-title:before,.mdl-button .admonition.attention .admonition-title:before,.mdl-button .admonition.caution .admonition-title:before,.mdl-button .admonition.danger .admonition-title:before,.mdl-button .admonition.error .admonition-title:before,.mdl-button .admonition.hint .admonition-title:before,.mdl-button .admonition.important .admonition-title:before,.mdl-button .admonition.note .admonition-title:before,.mdl-button .admonition.seealso .admonition-title:before,.mdl-button .admonition.tip .admonition-title:before,.mdl-button .admonition.warning .admonition-title:before,.mdl-button .material-icons,.mdl-button a.download:before{vertical-align:middle}.font-light{font-weight:300}.font-regular{font-weight:400}.font-heavy{font-weight:700}.left{text-align:left}.right{text-align:right}.center{text-align:center;margin-left:auto;margin-right:auto}.justify{text-align:justify}.hidden-sm{display:none}.container{width:100%;margin-left:auto;margin-right:auto}@media only screen and (min-width:33.75em){.container{width:80%}}@media only screen and (min-width:60em){.container{width:75%;max-width:60rem}}.row{position:relative;width:100%}.row [class^=col]{float:left;margin:.5rem 1%;min-height:.125rem}.row:after{content:"";display:table;clear:both}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{width:98%}.col-1-sm{width:6.33333%}.col-2-sm{width:14.66667%}.col-3-sm{width:23%}.col-4-sm{width:31.33333%}.col-5-sm{width:39.66667%}.col-6-sm{width:48%}.col-7-sm{width:56.33333%}.col-8-sm{width:64.66667%}.col-9-sm{width:73%}.col-10-sm{width:81.33333%}.col-11-sm{width:89.66667%}.col-12-sm{width:98%}@media only screen and (min-width:45em){.col-1{width:6.33333%}.col-2{width:14.66667%}.col-3{width:23%}.col-4{width:31.33333%}.col-5{width:39.66667%}.col-6{width:48%}.col-7{width:56.33333%}.col-8{width:64.66667%}.col-9{width:73%}.col-10{width:81.33333%}.col-11{width:89.66667%}.col-12{width:98%}.hidden-sm{display:block}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column}.admonition.attention .admonition-title:before,.admonition.caution .admonition-title:before,.admonition.danger .admonition-title:before,.admonition.error .admonition-title:before,.admonition.hint .admonition-title:before,.admonition.important .admonition-title:before,.admonition.note .admonition-title:before,.admonition.seealso .admonition-title:before,.admonition.tip .admonition-title:before,.admonition.warning .admonition-title:before,.material-icons,a.download:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}html{font-size:16px}body{display:block!important;background-color:#fafafa;font-size:1rem;line-height:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.mdl-layout__content:focus{outline:none}a.download>code.download,blockquote,h1,h2,h3,h4,h5,h6,span.mdl-layout-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.contents,.contents a,.globaltoc a.current,.toc-backref,.toctree-wrapper,.toctree-wrapper a,h1,h2,h3,h4,h5,h6{color:#048ccc!important}a{text-decoration:none}.page-content,.page-content dd,.page-content dl,.page-content dt,.page-content ol,.page-content p,.page-content table,.page-content td,.page-content th,.page-content ul{font-size:1rem}.brand{color:inherit;text-decoration:none}.section{overflow-x:auto}img{max-width:100%;display:block;margin-left:auto;margin-right:auto}div.figure p.caption{text-align:center;margin-top:.75rem}div.figure p.caption span.caption-number{font-style:normal}div.figure p.caption .caption-number:after{content:"\00a0"}.svg-icon{width:16px;height:16px;display:inline-block;fill:#f5f5f5;padding-right:5px;padding-top:4px;vertical-align:text-top}.admonition.attention a.download>i.admonition-title:before,.admonition.caution a.download>i.admonition-title:before,.admonition.danger a.download>i.admonition-title:before,.admonition.error a.download>i.admonition-title:before,.admonition.hint a.download>i.admonition-title:before,.admonition.important a.download>i.admonition-title:before,.admonition.note a.download>i.admonition-title:before,.admonition.seealso a.download>i.admonition-title:before,.admonition.tip a.download>i.admonition-title:before,.admonition.warning a.download>i.admonition-title:before,a.download>i.material-icons{position:relative;top:5px}a.download{text-decoration:none}.wrapper:after{content:"";display:table;clear:both}.wrapper{max-width:1090px;margin-right:auto;margin-left:auto;padding-right:45px;padding-left:30px}@media screen and (max-width:1024px){.wrapper{max-width:1120px;padding-right:15px;padding-left:15px}}.mdl-layout{margin-top:76px}.document{width:100%;margin:0 auto;display:flex}@media (min-width:1795px){.document{width:1400px}}.document .page-content{width:100%;margin:0 auto;padding:0 12px}@media (min-width:992px){.document .page-content{width:90%;padding:0 5%}}@media (min-width:1200px){.document .page-content{width:calc(90% - 230px);padding:0 5%}}.document .side-doc-outline{width:230px}@media (max-width:1199px){.document .side-doc-outline{display:none}}.document .side-doc-outline--content{position:fixed;overflow-x:auto;overflow-y:auto;width:inherit}.document .side-doc-outline--content::-webkit-scrollbar{width:6px}.document .side-doc-outline--content::-webkit-scrollbar-track{border-radius:6px}.document .side-doc-outline--content::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}@keyframes float-in{0%{transform:translateY(.5rem);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes float-out{0%{transform:translateY(0);opacity:1}to{transform:translateY(.5rem);opacity:0}}.page-content .headerlink{display:inline-block;text-decoration:none;margin-left:.8rem;color:inherit;opacity:0}.page-content .headerlink:hover{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1 .toc-backref,.page-content h2 .toc-backref,.page-content h3 .toc-backref,.page-content h4 .toc-backref,.page-content h5 .toc-backref,.page-content h6 .toc-backref{text-decoration:none}.page-content h1:hover .headerlink,.page-content h2:hover .headerlink,.page-content h3:hover .headerlink,.page-content h4:hover .headerlink,.page-content h5:hover .headerlink,.page-content h6:hover .headerlink{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1{font-size:2rem;line-height:2.25rem}.page-content h2{font-size:1.75rem;line-height:2rem;padding-top:1.5rem;margin-top:0;margin-bottom:1rem}.page-content h3{font-size:1.5rem;line-height:1.75rem;padding-top:1rem;margin-top:0;margin-bottom:.75rem}.page-content h4{font-size:1.25rem;line-height:1.5rem;padding-top:.75rem;margin-top:0;margin-bottom:.5rem}.page-content div.page-content h5{font-size:1.1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.page-content div.page-content h6{font-size:1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.admonition{padding:12px 20px;margin-top:10px;margin-bottom:10px}.admonition p.last{margin:16px}.admonition .admonition-title{font-size:16px;font-weight:700;color:#555;text-transform:uppercase;margin-top:7px}.admonition.note{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.note .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.note .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"info_outline";font-size:18px}.admonition.seealso{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.seealso .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.seealso .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"search";font-size:18px}.admonition.hint{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.hint .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.hint .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"help_outline";font-size:18px}.admonition.warning{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.warning .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.warning .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.attention{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.attention .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.attention .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.tip{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.tip .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.tip .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"lightbulb_outline";font-size:18px}.admonition.important{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.important .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.important .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"check_circle";font-size:18px}.admonition.error{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.error .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.error .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.caution{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.caution .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.caution .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.danger{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.danger .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.danger .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.page-content .highlight{margin:1px 0}.page-content .highlight pre{background:rgba(0,0,0,.05);color:rgba(0,0,0,.87);font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace;padding:.75rem;overflow:auto;overflow-y:hidden}.page-content .highlight pre .nd,.page-content .highlight pre .o{color:rgba(0,0,0,.87)}.page-content div.highlight-console div.highlight{background:none}.page-content .output .highlight pre{color:rgba(0,0,0,.87);background:#fafafa;border:1px solid #999;padding:.75rem}.page-content .code,.page-content code:not(.download){margin:0;border-radius:2px}.page-content .code,.page-content .code span.pre,.page-content code:not(.download),.page-content code:not(.download) span.pre{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .viewcode-link{padding-left:2em;font-size:80%}.page-content .class>dt,.page-content .function>dt,.page-content .method>dt,.page-content .rubric{display:table;margin:10px 0;font-size:100%;line-height:normal;background:#e7f2fa;color:#2b98f0;border-top:3px solid #55adf3;padding:10px;position:relative}.page-content .class>dt .descclassname,.page-content .class>dt .descname,.page-content .function>dt .descclassname,.page-content .function>dt .descname,.page-content .method>dt .descclassname,.page-content .method>dt .descname,.page-content .rubric .descclassname,.page-content .rubric .descname{color:rgba(0,0,0,.87);background:#e7f2fa;padding:3px}.page-content .class>dt em,.page-content .function>dt em,.page-content .method>dt em,.page-content .rubric em{padding:0 2px}.page-content .rubric{margin:30px 0 10px}.page-content .field-body{padding-left:40px}.page-content .field-body ul{padding:0 0 0 16px;margin:0}.page-content .seealso .docutils>dt{float:left;clear:left;padding:0 6px}.page-content .seealso .docutils>dd{padding-left:6em}.page-content .nblast{padding-bottom:1em}.page-content pre{font-size:90%;background:#eee;color:#455a64;padding:16px 32px;width:auto;border-radius:4px;word-wrap:break-word}.page-content pre:hover:before{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:0 .5rem;content:attr(click-to-copy);color:rgba(0,0,0,.5);border-radius:4px;position:relative;float:right;top:-.5rem;right:-.5rem;background:#c8c8c8;font-size:.8rem;cursor:pointer}.page-content blockquote{font-size:1rem;padding:0 1rem;border-left:3px solid rgba(0,0,0,.05)}.page-content blockquote:after{content:""!important;margin-left:0}.page-content blockquote:before{content:""!important}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){margin:1.5rem 0;table-layout:fixed;max-width:100%;min-width:70%}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{white-space:normal;overflow-wrap:break-word}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption{font-size:16px;margin:1rem 0 .8rem;white-space:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number{font-style:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number:after{content:"\00a0"}.globaltoc .caption,.globaltoc .toc{display:none}.globaltoc ul{list-style-type:none;padding:0;margin:0}.globaltoc ul li{min-height:18px}.globaltoc ul li .link-wrapper{display:flex;justify-content:space-between}.globaltoc ul li .link-wrapper>a{padding:4px 0;display:block;width:100%;font-size:1rem;text-decoration:none;color:#757575}.globaltoc ul li .link-wrapper>a.current{font-weight:700}.globaltoc .nav-toggle{padding:0;float:right;display:flex;align-items:center;justify-content:center;height:36px}.globaltoc .nav-toggle>a{padding:0;margin-left:0;margin-right:4px;cursor:pointer}.globaltoc .nav-toggle>a>i{font-size:18px}.globaltoc .nav-toggle.show{transform:rotate(180deg)}.globaltoc .nav-toggle.show>a{margin-right:0;margin-left:4px}.globaltoc nav>ul>li>span.link-wrapper{padding-left:8px}.globaltoc nav>ul>li>ul>li>span.link-wrapper{padding-left:16px}.globaltoc nav>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:24px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:32px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:40px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:48px}.localtoc{font-size:.75rem;padding-top:1rem}.localtoc .caption{padding-left:12px}.localtoc .caption-text{font-size:.9rem;font-weight:700}.localtoc>ul>li>a{display:none}.localtoc ul{padding:0;list-style-type:none}.localtoc li{padding-left:6px}.localtoc a{display:block;text-decoration:none;color:inherit;margin-top:8px;padding-left:8px;line-height:1.1rem}.localtoc a.current{padding-left:5px;border-left:3px solid;font-weight:700}.contents.topic,.toctree-wrapper{border-left:5px solid}.contents.topic>p.topic-title,.toctree-wrapper>p.caption{color:#757575;font-size:1rem;padding-left:14px}.contents.topic ul,.toctree-wrapper ul{padding-left:14px;list-style:none;line-height:30px}.contents.topic a,.toctree-wrapper a{font-size:1.2rem;text-decoration:none}.contents.topic a .pre,.toctree-wrapper a .pre{font-size:1rem}.contents.topic>ul>li>a,.toctree-wrapper>ul>li>a{font-size:1.3rem}.contents.topic>ul>li>a .pre,.toctree-wrapper>ul>li>a .pre{font-size:1.1rem}.page-content ul li{margin:.3rem 0}.page-content ul li p{margin:0}.page-content .option-list .option{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .option-list td{padding:.5rem;border:none}.mdl-layout__drawer{background-color:#fff}.mdl-layout__drawer::-webkit-scrollbar{width:6px}.mdl-layout__drawer::-webkit-scrollbar-track{border-radius:6px}.mdl-layout__drawer::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}.mdl-layout__drawer>.mdl-layout-title{font-weight:700;text-align:right;margin:0;padding:0;line-height:32px;border-bottom:1px solid rgba(0,0,0,.1);min-height:64px}.mdl-layout__drawer>.mdl-layout-title .title{color:inherit;display:block;height:100%;width:100%;text-decoration:none}.mdl-layout__drawer>.mdl-layout-title .title>img.logo{width:100%;margin:0;padding:0}.mdl-layout__drawer>.mdl-layout-title .title-text{font-weight:700;text-align:right;padding:0 10px;margin:16px 0 8px;line-height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:inherit;display:block}nav.breadcrumb>a.mdl-navigation__link{padding:0 8px;font-size:18px}@media (max-width:1199px){nav.breadcrumb{width:calc(100% - 64px)}nav.breadcrumb a.mdl-navigation__link.is-active{overflow-x:hidden;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admonition.attention nav.breadcrumb i.admonition-title:before,.admonition.caution nav.breadcrumb i.admonition-title:before,.admonition.danger nav.breadcrumb i.admonition-title:before,.admonition.error nav.breadcrumb i.admonition-title:before,.admonition.hint nav.breadcrumb i.admonition-title:before,.admonition.important nav.breadcrumb i.admonition-title:before,.admonition.note nav.breadcrumb i.admonition-title:before,.admonition.seealso nav.breadcrumb i.admonition-title:before,.admonition.tip nav.breadcrumb i.admonition-title:before,.admonition.warning nav.breadcrumb i.admonition-title:before,nav.breadcrumb .admonition.attention i.admonition-title:before,nav.breadcrumb .admonition.caution i.admonition-title:before,nav.breadcrumb .admonition.danger i.admonition-title:before,nav.breadcrumb .admonition.error i.admonition-title:before,nav.breadcrumb .admonition.hint i.admonition-title:before,nav.breadcrumb .admonition.important i.admonition-title:before,nav.breadcrumb .admonition.note i.admonition-title:before,nav.breadcrumb .admonition.seealso i.admonition-title:before,nav.breadcrumb .admonition.tip i.admonition-title:before,nav.breadcrumb .admonition.warning i.admonition-title:before,nav.breadcrumb a.mdl-navigation__link:not(.is-active),nav.breadcrumb i.material-icons{display:none}}div.mdl-layout__header{margin-top:77px}.mdl-layout__drawer-button{top:13px!important}div.mdl-layout__header-row.header-links{background:hsla(0,0%,100%,.2);width:100%;overflow-x:auto;overflow-y:hidden}div.mdl-layout__header-row.header-links a.mdl-navigation__link{font-size:1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link i{font-size:1.2rem;margin:0 8px;position:relative;bottom:-.1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link:hover{background-color:#2196f3;color:#eee}div.mdl-layout__header-row.header-links a.mdl-navigation__link[href="#"]{background-color:#2196f3;opacity:1;color:#fff}.site-title{font-weight:300!important;line-height:57px;letter-spacing:-1px;margin-bottom:0;float:left;color:#fff}.site-title,.site-title:visited{color:#424242}.site-header{position:fixed;top:0;width:100%;min-height:55px;padding-top:10px;padding-bottom:10px;background-color:#048ccc;z-index:10;font-weight:300;font-size:17px;border-bottom:1px solid #fff}.site-header-logo{width:120px;display:initial}.site-nav{float:right;line-height:57px}.site-nav .menu-icon,.site-nav .nav-trigger{display:none}.site-nav .page-link{color:#fff;line-height:1.5;font-weight:300}.site-nav .page-link:not(:last-child){margin-right:40px}.site-nav .page-link:hover{color:#fff;text-shadow:-.06ex 0 #fff,.06ex 0 #fff}.site-nav .page-link.page-current{color:#fff;text-decoration:underline}@media screen and (max-width:1024px){.site-nav{position:absolute;top:9px;right:15px;background-color:#178dc9;border-radius:2px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:20px;text-align:center}.site-nav .menu-icon>svg{fill:#fff}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{padding:5px 10px;display:block;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}footer.mdl-mini-footer{background-color:#212121}footer.mdl-mini-footer>div.mdl-mini-footer__left-section{margin-bottom:20px;display:flex;flex-direction:column}footer.mdl-mini-footer>div.mdl-mini-footer__left-section .mdl-logo{font-size:1.1rem}footer.mdl-mini-footer>div.mdl-mini-footer__right-section{font-size:.9rem;display:flex;flex-direction:column;justify-content:flex-end}footer.mdl-mini-footer>div.mdl-mini-footer__right-section a{color:inherit;font-weight:700;text-decoration:none}footer.mdl-mini-footer p.caption{display:none}.pagenation{width:100%;margin-top:80px;height:92px;background-color:#424242;display:flex}.pagenation #button-next,.pagenation #button-prev,.pagenation .button-common{text-transform:none;padding:0;height:92px;display:flex;justify-content:center;align-items:center;color:#fff}.pagenation #button-prev{margin-right:auto}.pagenation #button-prev .pagenation-text{text-align:left}.pagenation #button-next{margin-left:auto;flex-direction:row-reverse}.pagenation #button-next .pagenation-text{text-align:right}.pagenation-arrow-L{margin-right:20px}.pagenation-arrow-R{margin-left:20px}.pagenation-text{line-height:30px;font-size:20px}.pagenation-direction{opacity:.7;font-size:18px}@media screen and (max-width:1024px){.pagenation #button-prev{width:20%}.pagenation #button-next{width:80%}.pagenation #button-prev .pagenation-text{display:none}}@media screen and (min-width:1025px){.pagenation #button-next,.pagenation #button-prev{width:50%}.pagenation #button-prev .pagenation-text{display:block}}.site-footer{border-top:1px solid #f5f5f5;padding:30px 0;background-color:#424242;position:relative;z-index:10}.site-footer .footer-category-title{color:#048ccc}.site-footer a,.site-footer a:visited{color:#f5f5f5!important}.site-footer2{background-color:#424242;padding-top:40px;padding-bottom:10px;position:relative;z-index:10}.footer-heading{margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-bottom-warning{font-size:80%;color:#fff;float:left}.footer-logo{width:200px;margin-bottom:30px;margin-top:30px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-text{color:#f5f5f5}#waterfall-exp::-webkit-input-placeholder{color:#ccc}#waterfall-exp:-ms-input-placeholder{color:#ccc}#waterfall-exp::-moz-placeholder{color:#ccc}ul.search span.highlighted{font-weight:700}ul.search>li{margin-bottom:24px}#search-results ul{list-style:none;padding:0}#search-results ul li>a{text-decoration:none;font-size:1.2rem}a.download:before{content:"file_download";position:relative;top:5px;margin-right:5px}button.download{position:sticky;margin-left:1em}.mdl-card{margin:1em 1.5em 1em 0;display:inline-block;width:250px;min-height:140px;padding:18px}.mdl-card:hover{box-shadow:0 10px 20px rgba(0,0,0,.25),0 6px 6px rgba(0,0,0,.22);color:#000;cursor:pointer}.mdl-card__title{padding:0 0 1em;font-size:18px;color:#444}.mdl-card__supporting-text{line-height:1.5rem;padding:0;width:100%}.head-card.mdl-card{width:auto;display:block;max-width:800px;padding:24px}.head-card>.mdl-card__title{padding-bottom:0;height:60px;font-weight:700;text-transform:uppercase}.head-card>.mdl-card__menu{color:#fff}.head-card>.mdl-card__actions{padding:0}.cards{display:flex;flex-direction:row;flex-wrap:wrap} +.admonition,.mdl-shadow--2dp,.page-content pre:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-shadow--24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.14),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.2)}.mdl-data-table,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr{position:relative;height:48px;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color}.mdl-data-table tbody tr.is-selected,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{padding:0 18px 12px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:last-of-type{padding-right:24px}.mdl-data-table td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td{position:relative;vertical-align:middle;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td .mdl-data-table__select{vertical-align:middle}.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdl-data-table th.mdl-data-table__header--sorted-descending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdl-data-table th.mdl-data-table__header--sorted-ascending:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:16px;content:"\e5d8";margin-right:5px;vertical-align:sub}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover{cursor:pointer}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{content:"\e5db"}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{text-align:left}.mdl-mini-footer{display:flex;flex-flow:row wrap;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:"";display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul{display:flex;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-card{display:flex;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:#ff6e40;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{align-items:center;color:#000;display:block;display:flex;justify-content:stretch;line-height:normal;padding:16px;perspective-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{align-self:flex-end;color:inherit;display:block;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:rgba(0,0,0,.54);margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:1rem;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__supporting-text.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-button{background:transparent;border:none;border-radius:2px;color:#000;position:relative;height:36px;margin:0;min-width:64px;padding:0 16px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;line-height:1;letter-spacing:0;overflow:hidden;will-change:box-shadow;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdl-button.mdl-button--colored{color:#2196f3}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:hsla(0,0%,62%,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised.mdl-button--colored{background:#2196f3;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#2196f3}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:hsla(0,0%,62%,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.admonition.attention .mdl-button--fab .admonition-title:before,.admonition.caution .mdl-button--fab .admonition-title:before,.admonition.danger .mdl-button--fab .admonition-title:before,.admonition.error .mdl-button--fab .admonition-title:before,.admonition.hint .mdl-button--fab .admonition-title:before,.admonition.important .mdl-button--fab .admonition-title:before,.admonition.note .mdl-button--fab .admonition-title:before,.admonition.seealso .mdl-button--fab .admonition-title:before,.admonition.tip .mdl-button--fab .admonition-title:before,.admonition.warning .mdl-button--fab .admonition-title:before,.mdl-button--fab .admonition.attention .admonition-title:before,.mdl-button--fab .admonition.caution .admonition-title:before,.mdl-button--fab .admonition.danger .admonition-title:before,.mdl-button--fab .admonition.error .admonition-title:before,.mdl-button--fab .admonition.hint .admonition-title:before,.mdl-button--fab .admonition.important .admonition-title:before,.mdl-button--fab .admonition.note .admonition-title:before,.mdl-button--fab .admonition.seealso .admonition-title:before,.mdl-button--fab .admonition.tip .admonition-title:before,.mdl-button--fab .admonition.warning .admonition-title:before,.mdl-button--fab .material-icons,.mdl-button--fab a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab.mdl-button--colored{background:#ff6e40;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff6e40}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.admonition.attention .mdl-button--icon .admonition-title:before,.admonition.caution .mdl-button--icon .admonition-title:before,.admonition.danger .mdl-button--icon .admonition-title:before,.admonition.error .mdl-button--icon .admonition-title:before,.admonition.hint .mdl-button--icon .admonition-title:before,.admonition.important .mdl-button--icon .admonition-title:before,.admonition.note .mdl-button--icon .admonition-title:before,.admonition.seealso .mdl-button--icon .admonition-title:before,.admonition.tip .mdl-button--icon .admonition-title:before,.admonition.warning .mdl-button--icon .admonition-title:before,.mdl-button--icon .admonition.attention .admonition-title:before,.mdl-button--icon .admonition.caution .admonition-title:before,.mdl-button--icon .admonition.danger .admonition-title:before,.mdl-button--icon .admonition.error .admonition-title:before,.mdl-button--icon .admonition.hint .admonition-title:before,.mdl-button--icon .admonition.important .admonition-title:before,.mdl-button--icon .admonition.note .admonition-title:before,.mdl-button--icon .admonition.seealso .admonition-title:before,.mdl-button--icon .admonition.tip .admonition-title:before,.mdl-button--icon .admonition.warning .admonition-title:before,.mdl-button--icon .material-icons,.mdl-button--icon a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.admonition.attention .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.caution .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.danger .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.error .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.hint .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.important .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.note .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.seealso .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.tip .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.warning .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.attention .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.caution .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.danger .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.error .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.hint .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.important .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.note .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.seealso .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.tip .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.warning .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .material-icons,.mdl-button--icon.mdl-button--mini-icon a.download:before{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#2196f3}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#2196f3}.mdl-button--accent.mdl-button--accent{color:#ff6e40}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff6e40}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:default;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:none}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.admonition.attention .mdl-button .admonition-title:before,.admonition.caution .mdl-button .admonition-title:before,.admonition.danger .mdl-button .admonition-title:before,.admonition.error .mdl-button .admonition-title:before,.admonition.hint .mdl-button .admonition-title:before,.admonition.important .mdl-button .admonition-title:before,.admonition.note .mdl-button .admonition-title:before,.admonition.seealso .mdl-button .admonition-title:before,.admonition.tip .mdl-button .admonition-title:before,.admonition.warning .mdl-button .admonition-title:before,.mdl-button .admonition.attention .admonition-title:before,.mdl-button .admonition.caution .admonition-title:before,.mdl-button .admonition.danger .admonition-title:before,.mdl-button .admonition.error .admonition-title:before,.mdl-button .admonition.hint .admonition-title:before,.mdl-button .admonition.important .admonition-title:before,.mdl-button .admonition.note .admonition-title:before,.mdl-button .admonition.seealso .admonition-title:before,.mdl-button .admonition.tip .admonition-title:before,.mdl-button .admonition.warning .admonition-title:before,.mdl-button .material-icons,.mdl-button a.download:before{vertical-align:middle}.font-light{font-weight:300}.font-regular{font-weight:400}.font-heavy{font-weight:700}.left{text-align:left}.right{text-align:right}.center{text-align:center;margin-left:auto;margin-right:auto}.justify{text-align:justify}.hidden-sm{display:none}.container{width:100%;margin-left:auto;margin-right:auto}.row{position:relative;width:100%}.row [class^=col]{float:left;margin:.5rem 1%;min-height:.125rem}.row:after{content:"";display:table;clear:both}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{width:98%}.col-1-sm{width:6.33333%}.col-2-sm{width:14.66667%}.col-3-sm{width:23%}.col-4-sm{width:31.33333%}.col-5-sm{width:39.66667%}.col-6-sm{width:48%}.col-7-sm{width:56.33333%}.col-8-sm{width:64.66667%}.col-9-sm{width:73%}.col-10-sm{width:81.33333%}.col-11-sm{width:89.66667%}.col-12-sm{width:98%}@media only screen and (min-width:45em){.col-1{width:6.33333%}.col-2{width:14.66667%}.col-3{width:23%}.col-4{width:31.33333%}.col-5{width:39.66667%}.col-6{width:48%}.col-7{width:56.33333%}.col-8{width:64.66667%}.col-9{width:73%}.col-10{width:81.33333%}.col-11{width:89.66667%}.col-12{width:98%}.hidden-sm{display:block}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column}.admonition.attention .admonition-title:before,.admonition.caution .admonition-title:before,.admonition.danger .admonition-title:before,.admonition.error .admonition-title:before,.admonition.hint .admonition-title:before,.admonition.important .admonition-title:before,.admonition.note .admonition-title:before,.admonition.seealso .admonition-title:before,.admonition.tip .admonition-title:before,.admonition.warning .admonition-title:before,.material-icons,a.download:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}html{font-size:16px}body{display:block!important;background-color:#fafafa;font-size:1rem;line-height:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.mdl-layout__content:focus{outline:none}.mdl-layout__content header.mdl-layout__drawer{display:none}.mdl-layout__container{height:calc(100% - 76px);margin-top:76px}.mdl-layout__header{position:fixed;transition:transform .5s}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:300px}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}}a.download>code.download,blockquote,h1,h2,h3,h4,h5,h6,span.mdl-layout-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.contents,.contents a,.globaltoc a.current,.toc-backref,.toctree-wrapper,.toctree-wrapper a,h1,h2,h3,h4,h5,h6{color:#048ccc!important}a{text-decoration:none}.page-content,.page-content dd,.page-content dl,.page-content dt,.page-content ol,.page-content p,.page-content table,.page-content td,.page-content th,.page-content ul{font-size:1rem}.brand{color:inherit;text-decoration:none}.section{overflow-x:auto}img{max-width:100%;display:block;margin-left:auto;margin-right:auto}div.figure p.caption{text-align:center;margin-top:.75rem}div.figure p.caption span.caption-number{font-style:normal}div.figure p.caption .caption-number:after{content:"\00a0"}.svg-icon{width:16px;height:16px;display:inline-block;fill:#f5f5f5;padding-right:5px;padding-top:4px;vertical-align:text-top}.admonition.attention a.download>i.admonition-title:before,.admonition.caution a.download>i.admonition-title:before,.admonition.danger a.download>i.admonition-title:before,.admonition.error a.download>i.admonition-title:before,.admonition.hint a.download>i.admonition-title:before,.admonition.important a.download>i.admonition-title:before,.admonition.note a.download>i.admonition-title:before,.admonition.seealso a.download>i.admonition-title:before,.admonition.tip a.download>i.admonition-title:before,.admonition.warning a.download>i.admonition-title:before,a.download>i.material-icons{position:relative;top:5px}a.download{text-decoration:none}.wrapper:after{content:"";display:table;clear:both}.wrapper{max-width:1090px;margin-right:auto;margin-left:auto;padding-right:45px;padding-left:30px}@media screen and (max-width:1024px){.wrapper{max-width:1120px;padding-right:15px;padding-left:15px}}.document{width:100%;margin:84px auto;display:flex}@media (min-width:1795px){.document{width:100%}}.document .page-content{width:100%;margin:0 auto;padding:0 12px}@media (min-width:992px){.document .page-content{width:90%;padding:0 5%}}@media (min-width:1200px){.document .page-content{width:calc(90% - 230px);padding:0 5%}}.document .side-doc-outline{width:230px}@media (max-width:1199px){.document .side-doc-outline{display:none}}.document .side-doc-outline--content{position:fixed;overflow-x:auto;overflow-y:auto;width:inherit;right:0}.document .side-doc-outline--content::-webkit-scrollbar{width:6px}.document .side-doc-outline--content::-webkit-scrollbar-track{border-radius:6px}.document .side-doc-outline--content::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}@keyframes float-in{0%{transform:translateY(.5rem);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes float-out{0%{transform:translateY(0);opacity:1}to{transform:translateY(.5rem);opacity:0}}.page-content .headerlink{display:inline-block;text-decoration:none;margin-left:.8rem;color:inherit;opacity:0}.page-content .headerlink:hover{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1 .toc-backref,.page-content h2 .toc-backref,.page-content h3 .toc-backref,.page-content h4 .toc-backref,.page-content h5 .toc-backref,.page-content h6 .toc-backref{text-decoration:none}.page-content h1:hover .headerlink,.page-content h2:hover .headerlink,.page-content h3:hover .headerlink,.page-content h4:hover .headerlink,.page-content h5:hover .headerlink,.page-content h6:hover .headerlink{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1{font-size:2rem;line-height:2.25rem}.page-content h2{font-size:1.75rem;line-height:2rem;padding-top:1.5rem;margin-top:0;margin-bottom:1rem}.page-content h3{font-size:1.5rem;line-height:1.75rem;padding-top:1rem;margin-top:0;margin-bottom:.75rem}.page-content h4{font-size:1.25rem;line-height:1.5rem;padding-top:.75rem;margin-top:0;margin-bottom:.5rem}.page-content div.page-content h5{font-size:1.1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.page-content div.page-content h6{font-size:1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.admonition{padding:12px 20px;margin-top:10px;margin-bottom:10px}.admonition p.last{margin:16px}.admonition .admonition-title{font-size:16px;font-weight:700;color:#555;text-transform:uppercase;margin-top:7px}.admonition.note{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.note .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.note .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"info_outline";font-size:18px}.admonition.seealso{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.seealso .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.seealso .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"search";font-size:18px}.admonition.hint{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.hint .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.hint .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"help_outline";font-size:18px}.admonition.warning{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.warning .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.warning .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.attention{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.attention .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.attention .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.tip{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.tip .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.tip .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"lightbulb_outline";font-size:18px}.admonition.important{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.important .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.important .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"check_circle";font-size:18px}.admonition.error{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.error .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.error .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.caution{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.caution .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.caution .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.danger{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.danger .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.danger .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.page-content .highlight{margin:1px 0}.page-content .highlight pre{background:rgba(0,0,0,.05);color:rgba(0,0,0,.87);font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace;padding:.75rem;overflow:auto;overflow-y:hidden}.page-content .highlight pre .nd,.page-content .highlight pre .o{color:rgba(0,0,0,.87)}.page-content div.highlight-console div.highlight{background:none}.page-content .output .highlight pre{color:rgba(0,0,0,.87);background:#fafafa;border:1px solid #999;padding:.75rem}.page-content .code,.page-content code:not(.download){margin:0;border-radius:2px}.page-content .code,.page-content .code span.pre,.page-content code:not(.download),.page-content code:not(.download) span.pre{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .viewcode-link{padding-left:2em;font-size:80%}.page-content .class>dt,.page-content .function>dt,.page-content .method>dt,.page-content .rubric{display:table;margin:10px 0;font-size:100%;line-height:normal;background:#e7f2fa;color:#2b98f0;border-top:3px solid #55adf3;padding:10px;position:relative}.page-content .class>dt .descclassname,.page-content .class>dt .descname,.page-content .function>dt .descclassname,.page-content .function>dt .descname,.page-content .method>dt .descclassname,.page-content .method>dt .descname,.page-content .rubric .descclassname,.page-content .rubric .descname{color:rgba(0,0,0,.87);background:#e7f2fa;padding:3px}.page-content .class>dt em,.page-content .function>dt em,.page-content .method>dt em,.page-content .rubric em{padding:0 2px}.page-content .rubric{margin:30px 0 10px}.page-content .field-body{padding-left:40px}.page-content .field-body ul{padding:0 0 0 16px;margin:0}.page-content .seealso .docutils>dt{float:left;clear:left;padding:0 6px}.page-content .seealso .docutils>dd{padding-left:6em}.page-content .nblast{padding-bottom:1em}.page-content pre{font-size:90%;background:#eee;color:#455a64;padding:16px 32px;width:auto;border-radius:4px;word-wrap:break-word}.page-content pre:hover:before{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:0 .5rem;content:attr(click-to-copy);color:rgba(0,0,0,.5);border-radius:4px;position:relative;float:right;top:-.5rem;right:-.5rem;background:#c8c8c8;font-size:.8rem;cursor:pointer}.page-content blockquote{font-size:1rem;padding:0 1rem;border-left:3px solid rgba(0,0,0,.05)}.page-content blockquote:after{content:""!important;margin-left:0}.page-content blockquote:before{content:""!important}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){margin:1.5rem 0;table-layout:fixed;max-width:100%;min-width:70%}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{white-space:normal;overflow-wrap:break-word}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption{font-size:16px;margin:1rem 0 .8rem;white-space:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number{font-style:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number:after{content:"\00a0"}.globaltoc .caption,.globaltoc .toc{display:none}.globaltoc ul{list-style-type:none;padding:0;margin:0}.globaltoc ul li{min-height:18px}.globaltoc ul li .link-wrapper{display:flex;justify-content:space-between}.globaltoc ul li .link-wrapper>a{padding:4px 0;display:block;width:100%;font-size:1rem;text-decoration:none;color:#757575}.globaltoc ul li .link-wrapper>a.current{font-weight:700}.globaltoc .nav-toggle{padding:0;float:right;display:flex;align-items:center;justify-content:center;height:36px}.globaltoc .nav-toggle>a{padding:0;margin-left:0;margin-right:4px;cursor:pointer}.globaltoc .nav-toggle>a>i{font-size:18px}.globaltoc .nav-toggle.show{transform:rotate(180deg)}.globaltoc .nav-toggle.show>a{margin-right:0;margin-left:4px}.globaltoc nav>ul>li>span.link-wrapper{padding-left:8px}.globaltoc nav>ul>li>ul>li>span.link-wrapper{padding-left:16px}.globaltoc nav>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:24px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:32px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:40px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:48px}.localtoc{font-size:.75rem;padding-top:1rem}.localtoc .caption{padding-left:12px}.localtoc .caption-text{font-size:.9rem;font-weight:700}.localtoc>ul>li>a{display:none}.localtoc ul{padding:0;list-style-type:none}.localtoc li{padding-left:6px}.localtoc a{display:block;text-decoration:none;color:inherit;margin-top:8px;padding-left:8px;line-height:1.1rem}.localtoc a.current{padding-left:5px;border-left:3px solid;font-weight:700}.contents.topic,.toctree-wrapper{border-left:5px solid}.contents.topic>p.topic-title,.toctree-wrapper>p.caption{color:#757575;font-size:1rem;padding-left:14px}.contents.topic ul,.toctree-wrapper ul{padding-left:14px;list-style:none;line-height:30px}.contents.topic a,.toctree-wrapper a{font-size:1.2rem;text-decoration:none}.contents.topic a .pre,.toctree-wrapper a .pre{font-size:1rem}.contents.topic>ul>li>a,.toctree-wrapper>ul>li>a{font-size:1.3rem}.contents.topic>ul>li>a .pre,.toctree-wrapper>ul>li>a .pre{font-size:1.1rem}.page-content ul li{margin:.3rem 0}.page-content ul li p{margin:0}.page-content .option-list .option{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .option-list td{padding:.5rem;border:none}.mdl-layout__drawer{background-color:#fff}.mdl-layout__drawer::-webkit-scrollbar{width:6px}.mdl-layout__drawer::-webkit-scrollbar-track{border-radius:6px}.mdl-layout__drawer::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}.mdl-layout__drawer>.mdl-layout-title{font-weight:700;text-align:right;margin:0;padding:0;line-height:32px;border-bottom:1px solid rgba(0,0,0,.1);min-height:64px}.mdl-layout__drawer>.mdl-layout-title .title{color:inherit;display:block;height:100%;width:100%;text-decoration:none}.mdl-layout__drawer>.mdl-layout-title .title>img.logo{width:100%;margin:0;padding:0}.mdl-layout__drawer>.mdl-layout-title .title-text{font-weight:700;text-align:right;padding:0 10px;margin:16px 0 8px;line-height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:inherit;display:block}nav.breadcrumb>a.mdl-navigation__link{padding:0 8px;font-size:18px}@media (max-width:1199px){nav.breadcrumb{width:calc(100% - 64px)}nav.breadcrumb a.mdl-navigation__link.is-active{overflow-x:hidden;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admonition.attention nav.breadcrumb i.admonition-title:before,.admonition.caution nav.breadcrumb i.admonition-title:before,.admonition.danger nav.breadcrumb i.admonition-title:before,.admonition.error nav.breadcrumb i.admonition-title:before,.admonition.hint nav.breadcrumb i.admonition-title:before,.admonition.important nav.breadcrumb i.admonition-title:before,.admonition.note nav.breadcrumb i.admonition-title:before,.admonition.seealso nav.breadcrumb i.admonition-title:before,.admonition.tip nav.breadcrumb i.admonition-title:before,.admonition.warning nav.breadcrumb i.admonition-title:before,nav.breadcrumb .admonition.attention i.admonition-title:before,nav.breadcrumb .admonition.caution i.admonition-title:before,nav.breadcrumb .admonition.danger i.admonition-title:before,nav.breadcrumb .admonition.error i.admonition-title:before,nav.breadcrumb .admonition.hint i.admonition-title:before,nav.breadcrumb .admonition.important i.admonition-title:before,nav.breadcrumb .admonition.note i.admonition-title:before,nav.breadcrumb .admonition.seealso i.admonition-title:before,nav.breadcrumb .admonition.tip i.admonition-title:before,nav.breadcrumb .admonition.warning i.admonition-title:before,nav.breadcrumb a.mdl-navigation__link:not(.is-active),nav.breadcrumb i.material-icons{display:none}}div.mdl-layout__header{margin-top:77px}.mdl-layout__drawer-button{top:13px!important}div.mdl-layout__header-row.header-links{background:hsla(0,0%,100%,.2);width:100%;overflow-x:auto;overflow-y:hidden}div.mdl-layout__header-row.header-links a.mdl-navigation__link{font-size:1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link i{font-size:1.2rem;margin:0 8px;position:relative;bottom:-.1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link:hover{background-color:#2196f3;color:#eee}div.mdl-layout__header-row.header-links a.mdl-navigation__link[href="#"]{background-color:#2196f3;opacity:1;color:#fff}.site-title{font-weight:300!important;line-height:57px;letter-spacing:-1px;margin-bottom:0;float:left;color:#fff}.site-title,.site-title:visited{color:#424242}.site-header{position:fixed;top:0;width:100%;min-height:55px;padding-top:10px;padding-bottom:10px;background-color:#048ccc;z-index:10;font-weight:300;font-size:17px;border-bottom:1px solid #fff}.site-header-logo{width:120px;display:initial}.site-nav{float:right;line-height:57px}.site-nav .menu-icon,.site-nav .nav-trigger{display:none}.site-nav .page-link{color:#fff;line-height:1.5;font-weight:300}.site-nav .page-link:not(:last-child){margin-right:40px}.site-nav .page-link:hover{color:#fff;text-shadow:-.06ex 0 #fff,.06ex 0 #fff}.site-nav .page-link.page-current{color:#fff;text-decoration:underline}@media screen and (max-width:1024px){.site-nav{position:absolute;top:9px;right:15px;background-color:#178dc9;border-radius:2px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:20px;text-align:center}.site-nav .menu-icon>svg{fill:#fff}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{padding:5px 10px;display:block;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}footer.mdl-mini-footer{background-color:#212121}footer.mdl-mini-footer>div.mdl-mini-footer__left-section{margin-bottom:20px;display:flex;flex-direction:column}footer.mdl-mini-footer>div.mdl-mini-footer__left-section .mdl-logo{font-size:1.1rem}footer.mdl-mini-footer>div.mdl-mini-footer__right-section{font-size:.9rem;display:flex;flex-direction:column;justify-content:flex-end}footer.mdl-mini-footer>div.mdl-mini-footer__right-section a{color:inherit;font-weight:700;text-decoration:none}footer.mdl-mini-footer p.caption{display:none}.pagenation{width:100%;margin-top:80px;height:92px;background-color:#424242;display:flex}.pagenation #button-next,.pagenation #button-prev,.pagenation .button-common{text-transform:none;padding:0;height:92px;display:flex;justify-content:center;align-items:center;color:#fff}.pagenation #button-prev{margin-right:auto}.pagenation #button-prev .pagenation-text{text-align:left}.pagenation #button-next{margin-left:auto;flex-direction:row-reverse}.pagenation #button-next .pagenation-text{text-align:right}.pagenation-arrow-L{margin-right:20px}.pagenation-arrow-R{margin-left:20px}.pagenation-text{line-height:30px;font-size:20px}.pagenation-direction{opacity:.7;font-size:18px}@media screen and (max-width:1024px){.pagenation #button-prev{width:20%}.pagenation #button-next{width:80%}.pagenation #button-prev .pagenation-text{display:none}}@media screen and (min-width:1025px){.pagenation #button-next,.pagenation #button-prev{width:50%}.pagenation #button-prev .pagenation-text{display:block}}.site-footer{border-top:1px solid #f5f5f5;padding:30px 0;background-color:#424242;position:relative;z-index:10}.site-footer .footer-category-title{color:#048ccc}.site-footer a,.site-footer a:visited{color:#f5f5f5!important}.site-footer2{background-color:#424242;padding-top:40px;padding-bottom:10px;position:relative;z-index:10}.footer-heading{margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-bottom-warning{font-size:80%;color:#fff;float:left}.footer-logo{width:200px;margin-bottom:30px;margin-top:30px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-text{color:#f5f5f5}#waterfall-exp::-webkit-input-placeholder{color:#ccc}#waterfall-exp:-ms-input-placeholder{color:#ccc}#waterfall-exp::-moz-placeholder{color:#ccc}ul.search span.highlighted{font-weight:700}ul.search>li{margin-bottom:24px}#search-results ul{list-style:none;padding:0}#search-results ul li>a{text-decoration:none;font-size:1.2rem}a.download:before{content:"file_download";position:relative;top:5px;margin-right:5px}button.download{position:sticky;margin-left:1em}.mdl-card{margin:1em 1.5em 1em 0;display:inline-block;width:250px;min-height:140px;padding:18px}.mdl-card:hover{box-shadow:0 10px 20px rgba(0,0,0,.25),0 6px 6px rgba(0,0,0,.22);color:#000;cursor:pointer}.mdl-card__title{padding:0 0 1em;font-size:18px;color:#444}.mdl-card__supporting-text{line-height:1.5rem;padding:0;width:100%}.head-card.mdl-card{width:auto;display:block;max-width:800px;padding:24px}.head-card>.mdl-card__title{padding-bottom:0;height:60px;font-weight:700;text-transform:uppercase}.head-card>.mdl-card__menu{color:#fff}.head-card>.mdl-card__actions{padding:0}.cards{display:flex;flex-direction:row;flex-wrap:wrap} /*# sourceMappingURL=/sphinx_materialdesign_theme.css.map */ \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map index 74e6faf96c63..ad360169c25d 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/material-design-lite/src/shadow/_shadow.scss","../../node_modules/material-design-lite/src/_mixins.scss","../../node_modules/material-design-lite/src/data-table/_data-table.scss","../../node_modules/material-design-lite/src/_variables.scss","../../node_modules/material-design-lite/src/footer/_mini_footer.scss","../../node_modules/material-design-lite/src/card/_card.scss","../../node_modules/material-design-lite/src/button/_button.scss","../scss/grid/_simplegrid.scss","../scss/fonts/_material-icons.scss","../scss/_root.scss","../scss/_variables.scss","../scss/layout/_layout.scss","../scss/headerings/_headerings.scss","../scss/admonitions/_admonitions.scss","../scss/code/_code.scss","../scss/blockquote/_blockquote.scss","../scss/tables/_tables.scss","../scss/toc/_globaltoc.scss","../scss/toc/_localtoc.scss","../scss/toc/_toctree.scss","../scss/lists/_lists.scss","../scss/drawer/_drawer.scss","../scss/header/_header.scss","../scss/footer/_footer.scss","../scss/search/_search.scss","../scss/downloadlink/_downloadlink.scss","../scss/card/_card.scss"],"names":[],"mappings":"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","file":"sphinx_materialdesign_theme.css","sourceRoot":"../../src/js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-shadow--2dp {\n @include shadow-2dp();\n}\n\n.mdl-shadow--3dp {\n @include shadow-3dp();\n}\n\n.mdl-shadow--4dp {\n @include shadow-4dp();\n}\n\n.mdl-shadow--6dp {\n @include shadow-6dp();\n}\n\n.mdl-shadow--8dp {\n @include shadow-8dp();\n}\n\n.mdl-shadow--16dp {\n @include shadow-16dp();\n}\n\n.mdl-shadow--24dp {\n @include shadow-24dp();\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n @if $usePreferred {\n font-family: $preferred_font;\n }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 28px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n @if $usePreferred {\n font-weight: 500;\n } @else {\n font-weight: bold;\n }\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em;\n\n &:before {\n position: absolute;\n left: -0.5em;\n content: '“';\n }\n\n &:after {\n content: '”';\n margin-left: -0.05em;\n }\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-icon() {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n word-wrap: normal;\n font-feature-settings: 'liga';\n -webkit-font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 24px 38px 3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n @if(type_of($units) != 'number') {\n @error \"The unit given to dialog-width should be a number.\";\n }\n // 56dp is the base unit width for Dialogs.\n // With 5 units being the number of units for a mobile device.\n // https://goo.gl/sK2O5o\n width: $units * 56px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-data-table {\n position: relative;\n border: $data-table-dividers;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: $data-table-font-size;\n background-color: unquote(\"rgb(#{$color-white})\");\n\n thead {\n padding-bottom: 3px;\n\n .mdl-data-table__select {\n margin-top: 0;\n }\n }\n\n tbody {\n tr {\n position: relative;\n height: $data-table-row-height;\n @include material-animation-default(0.28s);\n transition-property: background-color;\n\n &.is-selected {\n background-color: $data-table-selection-color;\n }\n\n &:hover {\n background-color: $data-table-hover-color;\n }\n }\n }\n\n td, th {\n padding: 0 $data-table-column-padding 12px $data-table-column-padding;\n text-align: right;\n\n &:first-of-type {\n padding-left: 24px;\n }\n\n &:last-of-type {\n padding-right: 24px;\n }\n }\n\n td {\n position: relative;\n vertical-align: middle;\n height: $data-table-row-height;\n border-top: $data-table-dividers;\n border-bottom: $data-table-dividers;\n padding-top: $data-table-cell-top;\n box-sizing: border-box;\n\n .mdl-data-table__select {\n vertical-align: middle;\n }\n }\n\n th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n @include typo-body-2();\n height: $data-table-row-height;\n font-size: $data-table-header-font-size;\n color: $data-table-header-color;\n padding-bottom: 8px;\n box-sizing: border-box;\n\n &.mdl-data-table__header--sorted-ascending,\n &.mdl-data-table__header--sorted-descending {\n color: $data-table-header-sorted-color;\n &:before {\n @include typo-icon;\n font-size: $data-table-header-sort-icon-size;\n content: \"\\e5d8\";\n margin-right: 5px;\n vertical-align: sub;\n }\n &:hover {\n cursor: pointer;\n &:before {\n color: $data-table-header-sorted-icon-hover-color;\n }\n }\n }\n &.mdl-data-table__header--sorted-descending:before {\n content: \"\\e5db\";\n }\n }\n}\n\n.mdl-data-table__select {\n width: 16px;\n}\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ========== TYPOGRAPHY ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ========== COLORS ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ========== IMAGES ========== */\n$image_path: '/images' !default;\n\n/* ========== Color & Themes ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n $color-primary: '$color-primary';\n $color-primary-dark: '$color-primary-dark';\n $color-accent: '$color-accent';\n $color-primary-contrast: '$color-primary-contrast';\n $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ========== Typography ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ========== Components ========== */\n\n/* ========== Standard Buttons ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ========== Icon Toggles ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Radio Buttons ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Ripple effect ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ========== Layout ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ========== Content Tabs ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ========== Checkboxes ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ========== Switches ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Spinner ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ========== Text fields ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ========== Card ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ========== Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ========== List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ========== Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ========== Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ========== Tooltips ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ========== Footer ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n\n padding: ($padding * 2) $padding;\n\n color: $footer-color;\n background-color: $footer-bg-color;\n\n &:after {\n content: '';\n display: block;\n }\n\n & .mdl-logo {\n line-height: $footer-btn-size;\n }\n}\n\n.mdl-mini-footer--link-list,\n.mdl-mini-footer__link-list {\n display: flex;\n flex-flow: row nowrap;\n\n list-style: none;\n\n margin: 0;\n padding: 0;\n\n & li {\n margin-bottom: 0;\n margin-right: $padding;\n\n @media screen and (min-width: 760px) {\n line-height: $footer-btn-size;\n }\n }\n\n & a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n}\n\n.mdl-mini-footer--left-section,\n.mdl-mini-footer__left-section {\n display: inline-block;\n order: 0;\n}\n\n.mdl-mini-footer--right-section,\n.mdl-mini-footer__right-section {\n display: inline-block;\n order: 1;\n}\n\n.mdl-mini-footer--social-btn,\n.mdl-mini-footer__social-btn {\n width: $footer-btn-size;\n height: $footer-btn-size;\n\n padding: 0;\n margin: 0;\n\n background-color: $footer-button-fill-color;\n\n border: none;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: $card-font-size;\n font-weight: 400;\n min-height: $card-height;\n overflow: hidden;\n width: $card-width;\n z-index: $card-z-index;\n position: relative;\n background: $card-background-color;\n border-radius: 2px;\n box-sizing: border-box;\n}\n\n.mdl-card__media {\n background-color: $card-image-placeholder-color;\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box;\n}\n\n.mdl-card__title {\n align-items: center;\n color: $card-text-color;\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: $card-vertical-padding $card-horizontal-padding;\n perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;\n transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: $card-title-font-size;\n font-weight: $card-title-text-font-weight;\n line-height: normal;\n overflow: hidden;\n transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;\n margin: 0;\n}\n\n.mdl-card__subtitle-text {\n font-size: $card-subtitle-font-size;\n color: $card-subtitle-color;\n margin: 0;\n}\n\n.mdl-card__supporting-text {\n color: $card-supporting-text-text-color;\n font-size: $card-supporting-text-font-size;\n line-height: $card-supporting-text-line-height;\n overflow: hidden;\n padding: $card-vertical-padding $card-horizontal-padding;\n width: 90%;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__actions {\n font-size: $card-actions-font-size;\n line-height: normal;\n width: 100%;\n background-color: rgba(0,0,0,0);\n padding: 8px;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-top: 1px solid $card-border-color;\n }\n}\n\n.mdl-card--expand {\n flex-grow: 1;\n}\n\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n// The button component. Defaults to a flat button.\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: $button-border-radius;\n color: $button-secondary-color;\n position: relative;\n height: $button-height;\n margin: 0;\n min-width: $button-min-width;\n padding: 0 $button-padding;\n display: inline-block;\n @include typo-button();\n overflow: hidden;\n will-change: box-shadow;\n transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,\n background-color 0.2s $animation-curve-default,\n color 0.2s $animation-curve-default;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: $button-height;\n vertical-align: middle;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:hover {\n background-color: $button-hover-color;\n }\n\n &:focus:not(:active) {\n background-color: $button-focus-color;\n }\n\n &:active {\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n color: $button-primary-color-alt;\n\n &:focus:not(:active) {\n background-color: $button-focus-color-alt;\n }\n }\n}\n\ninput.mdl-button[type=\"submit\"] {\n -webkit-appearance:none;\n}\n\n // Raised buttons\n .mdl-button--raised {\n background: $button-primary-color;\n @include shadow-2dp();\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-primary-color-alt;\n color: $button-secondary-color-alt;\n\n &:hover {\n background-color: $button-hover-color-alt;\n }\n\n &:active {\n background-color: $button-active-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-ripple-color-alt;\n }\n }\n }\n\n\n // FABs\n .mdl-button--fab {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-fab-size;\n margin: auto;\n min-width: $button-fab-size;\n width: $button-fab-size;\n padding: 0;\n overflow: hidden;\n background: $button-primary-color;\n box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);\n position: relative;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-fab {\n height: $button-fab-size-mini;\n min-width: $button-fab-size-mini;\n width: $button-fab-size-mini;\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-fab-color-alt;\n color: $button-fab-text-color-alt;\n\n &:hover {\n background-color: $button-fab-hover-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-fab-active-color-alt;\n }\n\n &:active {\n background-color: $button-fab-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-fab-ripple-color-alt;\n }\n }\n }\n\n\n // Icon buttons\n .mdl-button--icon {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-icon-size;\n margin-left: 0;\n margin-right: 0;\n min-width: $button-icon-size;\n width: $button-icon-size;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-icon {\n height: $button-icon-size-mini;\n min-width: $button-icon-size-mini;\n width: $button-icon-size-mini;\n\n & .material-icons {\n top: ($button-icon-size-mini - $button-fab-font-size) / 2;\n left: ($button-icon-size-mini - $button-fab-font-size) / 2;\n }\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n }\n\n\n // Ripples\n .mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden;\n\n .mdl-button[disabled] & .mdl-ripple,\n .mdl-button.mdl-button--disabled & .mdl-ripple {\n background-color: transparent;\n }\n }\n\n// Colorized buttons\n\n.mdl-button--primary.mdl-button--primary {\n color: $button-primary-color-alt;\n & .mdl-ripple {\n background: $button-secondary-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-secondary-color-alt;\n background-color: $button-primary-color-alt;\n }\n}\n\n.mdl-button--accent.mdl-button--accent {\n color: $button-fab-color-alt;\n & .mdl-ripple {\n background: $button-fab-text-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-fab-text-color-alt;\n background-color: $button-fab-color-alt;\n }\n}\n\n// Disabled buttons\n\n.mdl-button {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n cursor: default;\n background-color: transparent;\n }\n\n &--fab {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n }\n }\n\n &--raised {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n box-shadow: none;\n }\n }\n &--colored {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n }\n }\n}\n\n// Align icons inside buttons with text\n.mdl-button .material-icons {\n vertical-align: middle;\n}\n","// SIMPLE GRID - SASS/SCSS\n\n\n// fonts\n$font-weight-light: 300;\n$font-weight-regular: 400;\n$font-weight-heavy: 700;\n\n// colors\n$dark-grey: #333447;\n$dark-gray: #333447; // for the Americans\n\n\n.font-light {\n font-weight: $font-weight-light;\n}\n\n.font-regular {\n font-weight: $font-weight-regular;\n}\n\n.font-heavy {\n font-weight: $font-weight-heavy;\n}\n\n// utility\n\n.left {\n text-align: left;\n}\n\n.right {\n text-align: right;\n}\n\n.center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.justify {\n text-align: justify;\n}\n\n.hidden-sm {\n display: none;\n}\n\n// grid\n\n$width: 98%;\n$gutter: 2%;\n$breakpoint-small: 33.75em; // 540px\n$breakpoint-med: 45em; // 720px\n$breakpoint-large: 60em; // 960px\n\n.container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n\n @media only screen and (min-width: $breakpoint-small) {\n width: 80%;\n }\n\n @media only screen and (min-width: $breakpoint-large) {\n width: 75%;\n max-width: 60rem;\n }\n}\n\n.row {\n position: relative;\n width: 100%;\n}\n\n.row [class^=\"col\"] {\n float: left;\n margin: 0.5rem 1%;\n min-height: 0.125rem;\n}\n\n.row::after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12 {\n width: $width;\n}\n\n.col-1-sm {\n width: ($width / 12) - ($gutter * 11 / 12);\n}\n\n.col-2-sm {\n width: ($width / 6) - ($gutter * 10 / 12);\n}\n\n.col-3-sm {\n width: ($width / 4) - ($gutter * 9 / 12);\n}\n\n.col-4-sm {\n width: ($width / 3) - ($gutter * 8 / 12);\n}\n\n.col-5-sm {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n}\n\n.col-6-sm {\n width: ($width / 2) - ($gutter * 6 / 12);\n}\n\n.col-7-sm {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n}\n\n.col-8-sm {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n}\n\n.col-9-sm {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n}\n\n.col-10-sm {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n}\n\n.col-11-sm {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n}\n\n.col-12-sm {\n width: $width;\n}\n\n@media only screen and (min-width: $breakpoint-med) {\n .col-1 {\n width: ($width / 12) - ($gutter * 11 / 12);\n }\n .col-2 {\n width: ($width / 6) - ($gutter * 10 / 12);\n }\n .col-3 {\n width: ($width / 4) - ($gutter * 9 / 12);\n }\n .col-4 {\n width: ($width / 3) - ($gutter * 8 / 12);\n }\n .col-5 {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n }\n .col-6 {\n width: ($width / 2) - ($gutter * 6 / 12);\n }\n .col-7 {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n }\n .col-8 {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n }\n .col-9 {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n }\n .col-10 {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n }\n .col-11 {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n }\n .col-12 {\n width: $width;\n }\n\n .hidden-sm {\n display: block;\n }\n}\n\n.row {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n flex-wrap: wrap;\n}\n\n.row > [class*='col-'] {\n display: flex;\n flex-direction: column;\n}\n","\n/*\nMaterial Icons\n*/\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n \n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n \n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n \n /* Support for IE. */\n font-feature-settings: 'liga';\n }","html {\n font-size: $font_size;\n}\n\nbody {\n display: block !important;\n background-color: $background_color;\n font-size: 1rem;\n line-height: 1.5rem;\n font-family: $body_font_family;\n}\n\n.mdl-layout__content:focus {\n outline: none;\n }\n\nh1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title,\na.download > code.download {\n font-family: $body_font_family;\n}\n\nh1, h2, h3, h4, h5, h6, .toc-backref, .contents, .toctree-wrapper, .contents a, .toctree-wrapper a, .globaltoc a.current {\n color: $color-mxnet !important;\n}\n\na {\n text-decoration: none;\n}\n\n.page-content {\n font-size: 1rem;\n p, ul, ol, dl, dd, dt, table, th, td {\n font-size: 1rem;\n }\n}\n\n.brand {\n color: inherit;\n text-decoration: none;\n}\n\n.section {\n overflow-x: auto;\n}\n\n\n/*\n * Figure Directive Styles\n */\n img {\n max-width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\ndiv.figure {\n p.caption {\n text-align: center;\n margin-top: .75rem;\n\n span.caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n}\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: $grey-color-light;\n padding-right: 5px;\n padding-top: 4px;\n vertical-align: text-top;\n}\n\n/*\n * Download Link Styles\n */\na.download > i.material-icons {\n position: relative;\n top: 5px;\n}\n\na.download {\n text-decoration: none;\n}\n\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: calc(#{$spacing-unit}+15px);\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @media screen and (max-width: $on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n","/*\nVariables\n*/\n$font_size: 16px;\n\n$background_color: #fafafa;\n$code_background: rgba(0,0,0,.05);\n\n$code_font_family: \"Menlo\", \"DejaVu Sans Mono\", \"Liberation Mono\", \"Consolas\", \"Ubuntu Mono\", \"Courier New\", \"andale mono\", \"lucida console\", monospace !default;\n$body_font_family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\" !default;\n$base-font-size: 17px !default;\n\n$xl-breakpoint: 1795px;\n$lg-breakpoint: 1200px;\n$md-breakpoint: 992px;\n$sm-breakpoint: 768px;\n$xs-breakpoint: 576px;\n\n$color-primary: $palette-blue-500;\n$color-primary-dark: $palette-blue-700 !default;\n$color-accent: $palette-deep-orange-A200 !default;\n$color-primary-contrast: $color-white !default;\n$color-accent-contrast: $color-white !default;\n\n\n$base-line-height: 1.5 !default;\n$spacing-unit: 30px !default;\n\n$color-mxnet: rgb(4,140,204);\n$color-mxnet-dark: rgb(4,60,110);\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 45%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 1150px !default;\n\n$on-palm: 600px !default;\n$on-palm: 900px !default;\n$on-laptop: 1024px !default;","/**\n * Layout Styles\n */\n $layout: (\n document: (\n xl: (\n width: 1400px,\n )\n ),\n drawer-container: (\n width: $layout-drawer-width,\n ),\n side-doc-outline: (\n width: 230px,\n ),\n page-content: (\n md: (\n width: 90%,\n padding: 0 5%\n ),\n lg: (\n width: calc( 90% - 230px ),\n padding: 0 5%\n )\n )\n);\n\n.mdl-layout {\n margin-top: 76px;\n}\n\n\n.document {\n width: 100%;\n margin: 0 auto;\n display: flex;\n\n @media (min-width: $xl-breakpoint) {\n width: map-get(map-get(map-get($layout, document), xl), width);\n }\n .page-content {\n width: 100%;\n margin: 0 auto;\n padding: 0 12px;\n\n @media (min-width: $md-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), md), width);\n padding: map-get(map-get(map-get($layout, page-content), md), padding);\n }\n\n @media (min-width: $lg-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), lg), width);\n padding: map-get(map-get(map-get($layout, page-content), lg), padding);\n }\n }\n\n .side-doc-outline {\n width: map-get(map-get($layout, side-doc-outline), width);\n\n @media (max-width: $lg-breakpoint - 1) {\n display: none;\n } \n &--content {\n position: fixed;\n overflow-x: auto;\n overflow-y: auto;\n width: inherit;\n &::-webkit-scrollbar {\n width: 6px;\n }\n \n &::-webkit-scrollbar-track {\n border-radius: 6px;\n }\n \n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .3);\n border-radius: 6px;\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\n }\n }\n }\n\n}","@keyframes float-in {\n 0% {\n transform: translateY(0.5rem);\n opacity: 0;\n }\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n}\n\n@keyframes float-out {\n 0% {\n transform: translateY(0);\n opacity: 1;\n }\n\t100% {\n\t\ttransform: translateY(0.5rem);\n\t\topacity: 0;\n\t}\n}\n\n.page-content {\n .headerlink {\n display: inline-block;\n text-decoration: none;\n margin-left: 0.8rem;\n color: inherit;\n opacity: 0;\n &:hover {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n\n h1, h2, h3, h4, h5, h6 {\n .toc-backref {\n text-decoration: none;\n }\n &:hover {\n .headerlink {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n }\n\n h1 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n\n h2 {\n font-size: 1.75rem;\n line-height: 2rem;\n padding-top: 1.5rem;\n margin-top: 0;\n margin-bottom: 1rem;\n }\n\n h3 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding-top: 1rem;\n margin-top: 0px;\n margin-bottom: .75rem;\n }\n\n h4 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n padding-top: .75rem;\n margin-top: 0px;\n margin-bottom: .5rem;\n }\n\n div.page-content h5 {\n font-size: 1.1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n div.page-content h6 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n\n}\n","\n/*\n * Admonition Styles\n */\n $admonitions: (\n hint: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"help_outline\"\n ),\n note: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"info_outline\"\n ),\n seealso: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"search\"\n ),\n warning: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n attention: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n tip: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"lightbulb_outline\"\n ),\n important: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"check_circle\"\n ),\n error: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n caution: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n danger: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n )\n);\n\n @mixin admonition-style($type) {\n border-left: solid 4px map-get(map-get($admonitions, $type), font-color);\n background-color: map-get(map-get($admonitions, $type), background-color);\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: map-get(map-get($admonitions, $type), font-color);\n\n margin-top: 4px;\n margin-bottom: 8px;\n &::before {\n @extend .material-icons;\n position: relative;\n margin-right: 5px;\n top: 3px;\n content: map-get(map-get($admonitions, $type), icon-content);\n font-size: 18px;\n }\n }\n}\n\n.admonition {\n @extend .mdl-shadow--2dp;\n\n padding: 12px 20px;\n margin-top: 10px;\n margin-bottom: 10px;\n p.last {\n margin: 16px;\n }\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: #555;\n text-transform: uppercase;\n margin-top: 7px;\n }\n\n @each $type in (note, seealso, hint, warning, attention, tip, important, error, caution, danger) {\n &.#{$type} {\n @include admonition-style($type);\n }\n }\n}\n",".page-content {\n .highlight {\n margin: 1px 0;\n pre {\n background: $code_background;\n color: rgba(0,0,0,.87);\n font-family: $code_font_family;\n padding: 0.75rem;\n overflow: auto;\n overflow-y: hidden;\n .o, .nd {\n color: rgba(0,0,0,.87);\n }\n }\n }\n\n div.highlight-console div.highlight {\n background: none;\n }\n\n // for jupyter notebook output cell\n .output {\n .highlight {\n pre {\n color: rgba(0,0,0,.87);\n background: $background_color;\n border-width: 1px;\n border-color: #999;\n border-style: solid;\n padding: 0.75rem;\n }\n }\n }\n\n .code, code:not(.download) {\n margin: 0 0;\n font-family: $code_font_family;\n border-radius: 2px;\n span.pre {\n font-family: $code_font_family;\n }\n }\n\n .viewcode-link {\n padding-left: 2em;\n font-size: 80%;\n }\n\n .rubric, .method > dt, .function > dt, .class > dt {\n display: table;\n margin: 10px 0;\n font-size: 100%;\n line-height: normal;\n background: #e7f2fa;\n color: #2B98F0;\n border-top: solid 3px #55ADF3;\n padding: 10px;\n position: relative;\n .descname, .descclassname {\n color: rgba(0,0,0,.87);\n background: #e7f2fa;\n padding: 3px;\n }\n em {\n padding: 0 2px;\n }\n }\n\n\n .rubric {\n margin: 30px 0 10px 0;\n }\n\n\n .field-body {\n padding-left: 40px;\n ul {\n padding: 0 0 0 16px;\n margin: 0;\n }\n }\n\n // .docutils > dt {\n // padding: 6px;\n // display: table;\n // margin-bottom: 6px;\n // border: none;\n // border-left: solid 3px #ccc;\n // background: #f0f0f0;\n // color: #555;\n // }\n\n .seealso .docutils > dt {\n float: left;\n clear: left;\n padding: 0 6px;\n }\n\n .seealso .docutils > dd {\n padding-left: 6em;\n }\n .nblast {\n padding-bottom: 1em;\n }\n\n pre {\n font-size: 90%;\n background: #eee;\n color: #455A64;\n padding: 16px 32px;\n width: auto;\n border-radius: 4px;\n word-wrap: break-word;\n\n &:hover {\n @extend .mdl-shadow--2dp;\n\n &:before {\n font-family: $body_font_family;\n padding: 0 0.5rem;\n content: attr(click-to-copy);\n color: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n position: relative;\n float: right;\n top: -0.5rem;\n right: -0.5rem;\n background: rgb(200, 200, 200);\n font-size: 0.8rem;\n cursor: pointer;\n }\n }\n }\n}\n","/*\n * Quotation Block Styles\n */\n .page-content {\n blockquote {\n font-size: 1rem;\n padding: 0 1rem;\n border-left: 3px solid $code_background;\n\n &:after {\n content: \"\" !important;\n margin-left: 0;\n }\n &:before {\n content: \"\" !important;\n }\n }\n }\n",".page-content {\n table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) {\n @extend .mdl-data-table;\n @extend .mdl-shadow--2dp;\n\n margin: 1.5rem 0;\n table-layout: fixed;\n max-width: 100%;\n min-width: 70%;\n\n th, td {\n @extend .mdl-data-table__cell--non-numeric;\n white-space: normal;\n overflow-wrap: break-word;\n }\n\n caption {\n font-size: $font_size;\n margin: 1rem 0 0.8rem 0;\n white-space: normal;\n .caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n\n }\n}\n",".globaltoc {\n \n .caption, .toc {\n display: none;\n }\n\n ul {\n\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n min-height: 18px;\n .link-wrapper {\n display: flex;\n justify-content: space-between;\n > a {\n padding: 4px 0;\n display: block;\n width: 100%;\n font-size: 1rem;\n text-decoration: none;\n color: $layout-drawer-navigation-color;\n &.current {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .nav-toggle {\n padding: 0;\n float: right;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n > a {\n padding: 0;\n margin-left: 0;\n margin-right: 4px;\n cursor: pointer;\n > i {\n font-size: 18px;\n }\n }\n &.show {\n transform: rotateZ(180deg);\n > a {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n }\n\n nav {\n > ul > li > span.link-wrapper {\n padding-left: 8px;\n }\n > ul > li > ul > li > span.link-wrapper {\n padding-left: 16px;\n }\n > ul > li > ul > li > ul > li > span.link-wrapper {\n padding-left: 24px;\n }\n > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 32px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 40px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 48px;\n }\n }\n}\n",".localtoc {\n font-size: 0.75rem;\n padding-top: 1rem;\n\n .caption {\n padding-left: 12px;\n &-text {\n font-size: 0.9rem;\n font-weight: 700;\n }\n }\n\n > ul > li > a {\n display: none;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n }\n\n li {\n padding-left: 6px;\n }\n\n a {\n display: block;\n text-decoration: none;\n color: inherit;\n margin-top: 8px;\n padding-left: 8px;\n line-height: 1.1rem;\n \n &.current {\n padding-left: 5px;\n border-left: 3px solid;\n font-weight: bold;\n }\n }\n}","/*\r\n * Toctree and Contents Directive Styles\r\n */\r\n .toctree-wrapper,\r\n .contents.topic {\r\n border-left: 5px solid;\r\n }\r\n\r\n .toctree-wrapper > p.caption,\r\n .contents.topic > p.topic-title {\r\n color: rgb(117, 117, 117);\r\n font-size: 1rem;\r\n padding-left: 14px;\r\n }\r\n\r\n .toctree-wrapper ul,\r\n .contents.topic ul{\r\n padding-left: 14px;\r\n list-style: none;\r\n line-height: 30px;\r\n }\r\n\r\n .toctree-wrapper a,\r\n .contents.topic a {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n .pre {\r\n font-size: 1rem;\r\n }\r\n }\r\n\r\n .toctree-wrapper > ul > li > a,\r\n .contents.topic > ul > li > a {\r\n font-size: 1.3rem;\r\n .pre {\r\n font-size: 1.1rem;\r\n }\r\n }\r\n",".page-content {\n ul {\n li {\n margin: .3rem 0;\n p {\n margin: 0;\n }\n }\n }\n .option-list {\n .option {\n font-family: $code_font_family;\n }\n td {\n padding: 0.5rem;\n border: none;\n }\n }\n}\n","/*\r\n * Drawer Styles\r\n */\r\n.mdl-layout {\r\n &__drawer {\r\n background-color: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, .3);\r\n border-radius: 6px;\r\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\r\n }\r\n\r\n > .mdl-layout-title {\r\n font-weight: bold;\r\n text-align: right;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 32px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n min-height: 64px;\r\n .title {\r\n color: inherit;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n text-decoration: none;\r\n > img.logo {\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n &-text {\r\n font-weight: bold;\r\n text-align: right;\r\n padding: 0 10px;\r\n margin: 16px 0 8px 0;\r\n line-height: 32px;\r\n font-family: $body_font_family;\r\n color: inherit;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Header Styles\r\n */\r\n\r\nnav.breadcrumb {\r\n > a.mdl-navigation__link {\r\n padding: 0 8px;\r\n font-size: 18px;\r\n }\r\n @media (max-width: $lg-breakpoint - 1) {\r\n width: calc( 100% - 64px );\r\n a.mdl-navigation__link.is-active {\r\n overflow-x: hidden;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n a.mdl-navigation__link:not(.is-active),\r\n i.material-icons {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\ndiv.mdl-layout__header {\r\n margin-top: 77px;\r\n}\r\n\r\n.mdl-layout__drawer-button {\r\n top: 13px !important;\r\n}\r\n\r\ndiv.mdl-layout__header-row.header-links {\r\n background: rgba(255,255,255,0.2);\r\n width: 100%;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n\r\n a.mdl-navigation__link {\r\n font-size: 1rem;\r\n i {\r\n font-size: 1.2rem;\r\n margin: 0 8px;\r\n position: relative;\r\n bottom: -0.1rem;\r\n }\r\n };\r\n\r\n a.mdl-navigation__link:hover {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n color: #eeeeee;\r\n };\r\n a.mdl-navigation__link[href=\"#\"] {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n opacity: 1;\r\n color: #ffffff;\r\n };\r\n}\r\n\r\n/* mxnet-header */\r\n\r\n\r\n.site-title {\r\n font-weight: 300 !important;\r\n line-height: 57px;\r\n letter-spacing: -1px;\r\n margin-bottom: 0;\r\n float: left;\r\n color: white;\r\n\r\n &,\r\n &:visited {\r\n color: $grey-color-dark;\r\n }\r\n}\r\n\r\n\r\n.site-header {\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n min-height: 55px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n background-color: $color-mxnet;\r\n z-index: 10;\r\n font-weight: 300;\r\n font-size: 17px;\r\n border-bottom: 1px solid white;\r\n}\r\n\r\n.site-header-logo {\r\n width: 120px;\r\n display: initial;\r\n}\r\n\r\n.site-nav {\r\n float: right;\r\n line-height: 57px;\r\n\r\n .nav-trigger {\r\n display: none;\r\n }\r\n\r\n .menu-icon {\r\n display: none;\r\n }\r\n\r\n .page-link {\r\n color: white;\r\n line-height: 1.5;\r\n font-weight: 300;\r\n // Gaps between nav items, but not on the last one\r\n &:not(:last-child) {\r\n margin-right: 40px;\r\n }\r\n\r\n &:hover {\r\n color: white;\r\n text-shadow: -0.06ex 0 white, 0.06ex 0 white;\r\n }\r\n }\r\n\r\n .page-link.page-current {\r\n color: white;\r\n text-decoration: underline;\r\n }\r\n\r\n @media screen and (max-width: $on-laptop) {\r\n position: absolute;\r\n top: 9px;\r\n right: 15px;\r\n background-color: rgb(23,141,201);\r\n border-radius: 2px;\r\n text-align: right;\r\n\r\n label[for=\"nav-trigger\"] {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 36px;\r\n z-index: 2;\r\n cursor: pointer;\r\n }\r\n\r\n .menu-icon {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 26px;\r\n line-height: 0;\r\n padding-top: 20px;\r\n text-align: center;\r\n\r\n > svg {\r\n fill: white;\r\n }\r\n }\r\n\r\n input ~ .trigger {\r\n clear: both;\r\n display: none;\r\n }\r\n\r\n input:checked ~ .trigger {\r\n display: block;\r\n padding-bottom: 5px;\r\n }\r\n\r\n .page-link {\r\n padding: 5px 10px;\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n margin-right: 0;\r\n }\r\n\r\n margin-left: 20px;\r\n }\r\n }\r\n}","/*\r\n * Footer Styles\r\n */\r\nfooter.mdl-mini-footer {\r\n background-color: #212121;\r\n > div.mdl-mini-footer__left-section {\r\n margin-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n .mdl-logo {\r\n font-size: 1.1rem;\r\n }\r\n ul {\r\n @extend .mdl-mini-footer__link-list;\r\n }\r\n }\r\n > div.mdl-mini-footer__right-section {\r\n font-size: 0.9rem;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n a {\r\n color: inherit;\r\n font-weight: bold;\r\n text-decoration: none;\r\n }\r\n }\r\n p.caption {\r\n display: none;\r\n }\r\n}\r\n\r\n/*\r\n * Pagenation Block Styles\r\n */\r\n .pagenation {\r\n width: 100%;\r\n margin-top: 80px;\r\n height: 92px;\r\n background-color: #424242;\r\n display: flex;\r\n\r\n .button-common {\r\n text-transform: none;\r\n padding: 0;\r\n height: 92px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n }\r\n #button-prev {\r\n @extend .button-common;\r\n margin-right: auto;\r\n .pagenation-text {\r\n text-align: left;\r\n }\r\n \r\n }\r\n #button-next {\r\n @extend .button-common;\r\n margin-left: auto;\r\n flex-direction: row-reverse;\r\n .pagenation-text {\r\n text-align: right;\r\n }\r\n }\r\n\r\n &-arrow {\r\n &-L {\r\n margin-right: 20px;\r\n }\r\n &-R {\r\n margin-left: 20px;\r\n }\r\n }\r\n\r\n &-text {\r\n line-height: 30px;\r\n font-size: 20px;\r\n }\r\n\r\n &-direction {\r\n opacity: 0.7;\r\n font-size: 18px;\r\n }\r\n @media screen and (max-width: 1024px) {\r\n #button-prev {\r\n width: 20%;\r\n }\r\n \r\n #button-next {\r\n width: 80%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: none;\r\n }\r\n }\r\n @media screen and (min-width: 1025px) {\r\n #button-prev,\r\n #button-next {\r\n width: 50%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: block;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Site footer\r\n */\r\n.site-footer {\r\n border-top: 1px solid $grey-color-light;\r\n padding: $spacing-unit 0;\r\n background-color: #424242;\r\n position: relative;\r\n z-index: 10;\r\n .footer-category-title {\r\n color: $color-mxnet;\r\n }\r\n a {\r\n color: $grey-color-light !important;\r\n\r\n &:visited {\r\n color: $grey-color-light !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.site-footer2 {\r\n background-color: #424242;\r\n padding-top: 40px;\r\n padding-bottom: 10px;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n\r\n.footer-heading {\r\n margin-bottom: $spacing-unit / 2;\r\n}\r\n\r\n.contact-list,\r\n.social-media-list {\r\n list-style: none;\r\n margin-left: 0;\r\n}\r\n\r\n\r\n.footer-bottom-warning {\r\n font-size: 80%;\r\n color: white;\r\n float: left;\r\n}\r\n\r\n.footer-logo {\r\n width: 200px;\r\n margin-bottom: 30px;\r\n margin-top: 30px;\r\n}\r\n\r\n.footer-col {\r\n float: left;\r\n margin-bottom: $spacing-unit / 2;\r\n padding-left: $spacing-unit / 2;\r\n}\r\n\r\n.footer-text {\r\n color: $grey-color-light;\r\n}\r\n\r\n"," /*\r\n * Search Styles\r\n */\r\n#waterfall-exp::-webkit-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp:-ms-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp::-moz-placeholder {\r\n color: #ccc;\r\n}\r\n\r\nul.search span.highlighted {\r\n font-weight: bold;\r\n}\r\n\r\nul.search > li {\r\n margin-bottom: 24px;\r\n}\r\n\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n li {\r\n > a {\r\n text-decoration: none;\r\n font-size: 1.2rem;\r\n }\r\n }\r\n }\r\n}\r\n","a.download {\n &:before {\n @extend .material-icons;\n content: \"file_download\";\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n}\n\nbutton.download {\n position: sticky;\n margin-left: 1em;\n}\n",".mdl-card {\n margin: 1em 1.5em 1em 0;\n display: inline-block;\n width: 250px;\n min-height: 140px;\n padding: 18px;\n}\n.mdl-card:hover {\n box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 6px 6px rgba(0,0,0,0.22);\n color: #000;\n cursor: pointer;\n}\n.mdl-card__title {\n padding: 0 0 1em 0;\n font-size: 18px;\n color: #444;\n}\n\n.mdl-card__supporting-text {\n line-height: 1.5rem;\n padding: 0px;\n width: 100%;\n}\n\n.head-card.mdl-card {\n width: auto;\n display: block;\n max-width: 800px;\n padding: 24px;\n}\n\n.head-card > .mdl-card__title {\n padding-bottom: 0px;\n height: 60px;\n font-weight: 700;\n text-transform: uppercase;\n}\n.head-card > .mdl-card__menu {\n color: #fff;\n}\n.head-card > .mdl-card__actions {\n padding: 0;\n}\n.cards {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../node_modules/material-design-lite/src/shadow/_shadow.scss","../../node_modules/material-design-lite/src/_mixins.scss","../../node_modules/material-design-lite/src/data-table/_data-table.scss","../../node_modules/material-design-lite/src/_variables.scss","../../node_modules/material-design-lite/src/footer/_mini_footer.scss","../../node_modules/material-design-lite/src/card/_card.scss","../../node_modules/material-design-lite/src/button/_button.scss","../scss/grid/_simplegrid.scss","../scss/fonts/_material-icons.scss","../scss/_root.scss","../scss/_variables.scss","../scss/layout/_layout.scss","../scss/headerings/_headerings.scss","../scss/admonitions/_admonitions.scss","../scss/code/_code.scss","../scss/blockquote/_blockquote.scss","../scss/tables/_tables.scss","../scss/toc/_globaltoc.scss","../scss/toc/_localtoc.scss","../scss/toc/_toctree.scss","../scss/lists/_lists.scss","../scss/drawer/_drawer.scss","../scss/header/_header.scss","../scss/footer/_footer.scss","../scss/search/_search.scss","../scss/downloadlink/_downloadlink.scss","../scss/card/_card.scss"],"names":[],"mappings":"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","file":"sphinx_materialdesign_theme.css","sourceRoot":"../../src/js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-shadow--2dp {\n @include shadow-2dp();\n}\n\n.mdl-shadow--3dp {\n @include shadow-3dp();\n}\n\n.mdl-shadow--4dp {\n @include shadow-4dp();\n}\n\n.mdl-shadow--6dp {\n @include shadow-6dp();\n}\n\n.mdl-shadow--8dp {\n @include shadow-8dp();\n}\n\n.mdl-shadow--16dp {\n @include shadow-16dp();\n}\n\n.mdl-shadow--24dp {\n @include shadow-24dp();\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n @if $usePreferred {\n font-family: $preferred_font;\n }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 28px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n @if $usePreferred {\n font-weight: 500;\n } @else {\n font-weight: bold;\n }\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em;\n\n &:before {\n position: absolute;\n left: -0.5em;\n content: '“';\n }\n\n &:after {\n content: '”';\n margin-left: -0.05em;\n }\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-icon() {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n word-wrap: normal;\n font-feature-settings: 'liga';\n -webkit-font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 24px 38px 3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n @if(type_of($units) != 'number') {\n @error \"The unit given to dialog-width should be a number.\";\n }\n // 56dp is the base unit width for Dialogs.\n // With 5 units being the number of units for a mobile device.\n // https://goo.gl/sK2O5o\n width: $units * 56px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-data-table {\n position: relative;\n border: $data-table-dividers;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: $data-table-font-size;\n background-color: unquote(\"rgb(#{$color-white})\");\n\n thead {\n padding-bottom: 3px;\n\n .mdl-data-table__select {\n margin-top: 0;\n }\n }\n\n tbody {\n tr {\n position: relative;\n height: $data-table-row-height;\n @include material-animation-default(0.28s);\n transition-property: background-color;\n\n &.is-selected {\n background-color: $data-table-selection-color;\n }\n\n &:hover {\n background-color: $data-table-hover-color;\n }\n }\n }\n\n td, th {\n padding: 0 $data-table-column-padding 12px $data-table-column-padding;\n text-align: right;\n\n &:first-of-type {\n padding-left: 24px;\n }\n\n &:last-of-type {\n padding-right: 24px;\n }\n }\n\n td {\n position: relative;\n vertical-align: middle;\n height: $data-table-row-height;\n border-top: $data-table-dividers;\n border-bottom: $data-table-dividers;\n padding-top: $data-table-cell-top;\n box-sizing: border-box;\n\n .mdl-data-table__select {\n vertical-align: middle;\n }\n }\n\n th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n @include typo-body-2();\n height: $data-table-row-height;\n font-size: $data-table-header-font-size;\n color: $data-table-header-color;\n padding-bottom: 8px;\n box-sizing: border-box;\n\n &.mdl-data-table__header--sorted-ascending,\n &.mdl-data-table__header--sorted-descending {\n color: $data-table-header-sorted-color;\n &:before {\n @include typo-icon;\n font-size: $data-table-header-sort-icon-size;\n content: \"\\e5d8\";\n margin-right: 5px;\n vertical-align: sub;\n }\n &:hover {\n cursor: pointer;\n &:before {\n color: $data-table-header-sorted-icon-hover-color;\n }\n }\n }\n &.mdl-data-table__header--sorted-descending:before {\n content: \"\\e5db\";\n }\n }\n}\n\n.mdl-data-table__select {\n width: 16px;\n}\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ========== TYPOGRAPHY ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ========== COLORS ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ========== IMAGES ========== */\n$image_path: '/images' !default;\n\n/* ========== Color & Themes ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n $color-primary: '$color-primary';\n $color-primary-dark: '$color-primary-dark';\n $color-accent: '$color-accent';\n $color-primary-contrast: '$color-primary-contrast';\n $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ========== Typography ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ========== Components ========== */\n\n/* ========== Standard Buttons ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ========== Icon Toggles ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Radio Buttons ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Ripple effect ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ========== Layout ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ========== Content Tabs ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ========== Checkboxes ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ========== Switches ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Spinner ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ========== Text fields ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ========== Card ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ========== Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ========== List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ========== Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ========== Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ========== Tooltips ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ========== Footer ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n\n padding: ($padding * 2) $padding;\n\n color: $footer-color;\n background-color: $footer-bg-color;\n\n &:after {\n content: '';\n display: block;\n }\n\n & .mdl-logo {\n line-height: $footer-btn-size;\n }\n}\n\n.mdl-mini-footer--link-list,\n.mdl-mini-footer__link-list {\n display: flex;\n flex-flow: row nowrap;\n\n list-style: none;\n\n margin: 0;\n padding: 0;\n\n & li {\n margin-bottom: 0;\n margin-right: $padding;\n\n @media screen and (min-width: 760px) {\n line-height: $footer-btn-size;\n }\n }\n\n & a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n}\n\n.mdl-mini-footer--left-section,\n.mdl-mini-footer__left-section {\n display: inline-block;\n order: 0;\n}\n\n.mdl-mini-footer--right-section,\n.mdl-mini-footer__right-section {\n display: inline-block;\n order: 1;\n}\n\n.mdl-mini-footer--social-btn,\n.mdl-mini-footer__social-btn {\n width: $footer-btn-size;\n height: $footer-btn-size;\n\n padding: 0;\n margin: 0;\n\n background-color: $footer-button-fill-color;\n\n border: none;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: $card-font-size;\n font-weight: 400;\n min-height: $card-height;\n overflow: hidden;\n width: $card-width;\n z-index: $card-z-index;\n position: relative;\n background: $card-background-color;\n border-radius: 2px;\n box-sizing: border-box;\n}\n\n.mdl-card__media {\n background-color: $card-image-placeholder-color;\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box;\n}\n\n.mdl-card__title {\n align-items: center;\n color: $card-text-color;\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: $card-vertical-padding $card-horizontal-padding;\n perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;\n transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: $card-title-font-size;\n font-weight: $card-title-text-font-weight;\n line-height: normal;\n overflow: hidden;\n transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;\n margin: 0;\n}\n\n.mdl-card__subtitle-text {\n font-size: $card-subtitle-font-size;\n color: $card-subtitle-color;\n margin: 0;\n}\n\n.mdl-card__supporting-text {\n color: $card-supporting-text-text-color;\n font-size: $card-supporting-text-font-size;\n line-height: $card-supporting-text-line-height;\n overflow: hidden;\n padding: $card-vertical-padding $card-horizontal-padding;\n width: 90%;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__actions {\n font-size: $card-actions-font-size;\n line-height: normal;\n width: 100%;\n background-color: rgba(0,0,0,0);\n padding: 8px;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-top: 1px solid $card-border-color;\n }\n}\n\n.mdl-card--expand {\n flex-grow: 1;\n}\n\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n// The button component. Defaults to a flat button.\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: $button-border-radius;\n color: $button-secondary-color;\n position: relative;\n height: $button-height;\n margin: 0;\n min-width: $button-min-width;\n padding: 0 $button-padding;\n display: inline-block;\n @include typo-button();\n overflow: hidden;\n will-change: box-shadow;\n transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,\n background-color 0.2s $animation-curve-default,\n color 0.2s $animation-curve-default;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: $button-height;\n vertical-align: middle;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:hover {\n background-color: $button-hover-color;\n }\n\n &:focus:not(:active) {\n background-color: $button-focus-color;\n }\n\n &:active {\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n color: $button-primary-color-alt;\n\n &:focus:not(:active) {\n background-color: $button-focus-color-alt;\n }\n }\n}\n\ninput.mdl-button[type=\"submit\"] {\n -webkit-appearance:none;\n}\n\n // Raised buttons\n .mdl-button--raised {\n background: $button-primary-color;\n @include shadow-2dp();\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-primary-color-alt;\n color: $button-secondary-color-alt;\n\n &:hover {\n background-color: $button-hover-color-alt;\n }\n\n &:active {\n background-color: $button-active-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-ripple-color-alt;\n }\n }\n }\n\n\n // FABs\n .mdl-button--fab {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-fab-size;\n margin: auto;\n min-width: $button-fab-size;\n width: $button-fab-size;\n padding: 0;\n overflow: hidden;\n background: $button-primary-color;\n box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);\n position: relative;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-fab {\n height: $button-fab-size-mini;\n min-width: $button-fab-size-mini;\n width: $button-fab-size-mini;\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-fab-color-alt;\n color: $button-fab-text-color-alt;\n\n &:hover {\n background-color: $button-fab-hover-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-fab-active-color-alt;\n }\n\n &:active {\n background-color: $button-fab-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-fab-ripple-color-alt;\n }\n }\n }\n\n\n // Icon buttons\n .mdl-button--icon {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-icon-size;\n margin-left: 0;\n margin-right: 0;\n min-width: $button-icon-size;\n width: $button-icon-size;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-icon {\n height: $button-icon-size-mini;\n min-width: $button-icon-size-mini;\n width: $button-icon-size-mini;\n\n & .material-icons {\n top: ($button-icon-size-mini - $button-fab-font-size) / 2;\n left: ($button-icon-size-mini - $button-fab-font-size) / 2;\n }\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n }\n\n\n // Ripples\n .mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden;\n\n .mdl-button[disabled] & .mdl-ripple,\n .mdl-button.mdl-button--disabled & .mdl-ripple {\n background-color: transparent;\n }\n }\n\n// Colorized buttons\n\n.mdl-button--primary.mdl-button--primary {\n color: $button-primary-color-alt;\n & .mdl-ripple {\n background: $button-secondary-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-secondary-color-alt;\n background-color: $button-primary-color-alt;\n }\n}\n\n.mdl-button--accent.mdl-button--accent {\n color: $button-fab-color-alt;\n & .mdl-ripple {\n background: $button-fab-text-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-fab-text-color-alt;\n background-color: $button-fab-color-alt;\n }\n}\n\n// Disabled buttons\n\n.mdl-button {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n cursor: default;\n background-color: transparent;\n }\n\n &--fab {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n }\n }\n\n &--raised {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n box-shadow: none;\n }\n }\n &--colored {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n }\n }\n}\n\n// Align icons inside buttons with text\n.mdl-button .material-icons {\n vertical-align: middle;\n}\n","// SIMPLE GRID - SASS/SCSS\n\n\n// fonts\n$font-weight-light: 300;\n$font-weight-regular: 400;\n$font-weight-heavy: 700;\n\n// colors\n$dark-grey: #333447;\n$dark-gray: #333447; // for the Americans\n\n\n.font-light {\n font-weight: $font-weight-light;\n}\n\n.font-regular {\n font-weight: $font-weight-regular;\n}\n\n.font-heavy {\n font-weight: $font-weight-heavy;\n}\n\n// utility\n\n.left {\n text-align: left;\n}\n\n.right {\n text-align: right;\n}\n\n.center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.justify {\n text-align: justify;\n}\n\n.hidden-sm {\n display: none;\n}\n\n// grid\n\n$width: 98%;\n$gutter: 2%;\n$breakpoint-small: 33.75em; // 540px\n$breakpoint-med: 45em; // 720px\n$breakpoint-large: 60em; // 960px\n\n.container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.row {\n position: relative;\n width: 100%;\n}\n\n.row [class^=\"col\"] {\n float: left;\n margin: 0.5rem 1%;\n min-height: 0.125rem;\n}\n\n.row::after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12 {\n width: $width;\n}\n\n.col-1-sm {\n width: ($width / 12) - ($gutter * 11 / 12);\n}\n\n.col-2-sm {\n width: ($width / 6) - ($gutter * 10 / 12);\n}\n\n.col-3-sm {\n width: ($width / 4) - ($gutter * 9 / 12);\n}\n\n.col-4-sm {\n width: ($width / 3) - ($gutter * 8 / 12);\n}\n\n.col-5-sm {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n}\n\n.col-6-sm {\n width: ($width / 2) - ($gutter * 6 / 12);\n}\n\n.col-7-sm {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n}\n\n.col-8-sm {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n}\n\n.col-9-sm {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n}\n\n.col-10-sm {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n}\n\n.col-11-sm {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n}\n\n.col-12-sm {\n width: $width;\n}\n\n@media only screen and (min-width: $breakpoint-med) {\n .col-1 {\n width: ($width / 12) - ($gutter * 11 / 12);\n }\n .col-2 {\n width: ($width / 6) - ($gutter * 10 / 12);\n }\n .col-3 {\n width: ($width / 4) - ($gutter * 9 / 12);\n }\n .col-4 {\n width: ($width / 3) - ($gutter * 8 / 12);\n }\n .col-5 {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n }\n .col-6 {\n width: ($width / 2) - ($gutter * 6 / 12);\n }\n .col-7 {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n }\n .col-8 {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n }\n .col-9 {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n }\n .col-10 {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n }\n .col-11 {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n }\n .col-12 {\n width: $width;\n }\n\n .hidden-sm {\n display: block;\n }\n}\n\n.row {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n flex-wrap: wrap;\n}\n\n.row > [class*='col-'] {\n display: flex;\n flex-direction: column;\n}\n","\n/*\nMaterial Icons\n*/\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n \n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n \n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n \n /* Support for IE. */\n font-feature-settings: 'liga';\n }","html {\n font-size: $font_size;\n}\n\nbody {\n display: block !important;\n background-color: $background_color;\n font-size: 1rem;\n line-height: 1.5rem;\n font-family: $body_font_family;\n}\n\n.mdl-layout__content:focus {\n outline: none;\n }\n\n.mdl-layout__content header.mdl-layout__drawer {\n display: none;\n}\n\n.mdl-layout__container {\n height: calc(100% - 76px);\n margin-top: 76px;\n}\n.mdl-layout__header {\n position: fixed;\n transition: transform 0.5s;\n}\n.mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left: 300px; \n}\n\n@media screen and (max-width: 1024px) {\n .mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left:0\n }\n}\n\nh1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title,\na.download > code.download {\n font-family: $body_font_family;\n}\n\nh1, h2, h3, h4, h5, h6, .toc-backref, .contents, .toctree-wrapper, .contents a, .toctree-wrapper a, .globaltoc a.current {\n color: $color-mxnet !important;\n}\n\na {\n text-decoration: none;\n}\n\n.page-content {\n font-size: 1rem;\n p, ul, ol, dl, dd, dt, table, th, td {\n font-size: 1rem;\n }\n}\n\n.brand {\n color: inherit;\n text-decoration: none;\n}\n\n.section {\n overflow-x: auto;\n}\n\n\n/*\n * Figure Directive Styles\n */\n img {\n max-width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\ndiv.figure {\n p.caption {\n text-align: center;\n margin-top: .75rem;\n\n span.caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n}\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: $grey-color-light;\n padding-right: 5px;\n padding-top: 4px;\n vertical-align: text-top;\n}\n\n/*\n * Download Link Styles\n */\na.download > i.material-icons {\n position: relative;\n top: 5px;\n}\n\na.download {\n text-decoration: none;\n}\n\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: calc(#{$spacing-unit}+15px);\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @media screen and (max-width: $on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n","/*\nVariables\n*/\n$font_size: 16px;\n\n$background_color: #fafafa;\n$code_background: rgba(0,0,0,.05);\n\n$code_font_family: \"Menlo\", \"DejaVu Sans Mono\", \"Liberation Mono\", \"Consolas\", \"Ubuntu Mono\", \"Courier New\", \"andale mono\", \"lucida console\", monospace !default;\n$body_font_family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\" !default;\n$base-font-size: 17px !default;\n\n$xl-breakpoint: 1795px;\n$lg-breakpoint: 1200px;\n$md-breakpoint: 992px;\n$sm-breakpoint: 768px;\n$xs-breakpoint: 576px;\n\n$color-primary: $palette-blue-500;\n$color-primary-dark: $palette-blue-700 !default;\n$color-accent: $palette-deep-orange-A200 !default;\n$color-primary-contrast: $color-white !default;\n$color-accent-contrast: $color-white !default;\n\n\n$base-line-height: 1.5 !default;\n$spacing-unit: 30px !default;\n\n$color-mxnet: rgb(4,140,204);\n$color-mxnet-dark: rgb(4,60,110);\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 45%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 1150px !default;\n\n$on-palm: 600px !default;\n$on-palm: 900px !default;\n$on-laptop: 1024px !default;","/**\n * Layout Styles\n */\n $layout: (\n document: (\n xl: (\n width: 100%,\n )\n ),\n drawer-container: (\n width: $layout-drawer-width,\n ),\n side-doc-outline: (\n width: 230px,\n ),\n page-content: (\n md: (\n width: 90%,\n padding: 0 5%\n ),\n lg: (\n width: calc( 90% - 230px ),\n padding: 0 5%\n )\n )\n);\n\n.document {\n width: 100%;\n margin: 84px auto;\n display: flex;\n\n @media (min-width: $xl-breakpoint) {\n width: map-get(map-get(map-get($layout, document), xl), width);\n }\n .page-content {\n width: 100%;\n margin: 0 auto;\n padding: 0 12px;\n\n @media (min-width: $md-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), md), width);\n padding: map-get(map-get(map-get($layout, page-content), md), padding);\n }\n\n @media (min-width: $lg-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), lg), width);\n padding: map-get(map-get(map-get($layout, page-content), lg), padding);\n }\n }\n\n .side-doc-outline {\n width: map-get(map-get($layout, side-doc-outline), width);\n\n @media (max-width: $lg-breakpoint - 1) {\n display: none;\n } \n &--content {\n position: fixed;\n overflow-x: auto;\n overflow-y: auto;\n width: inherit;\n right: 0px;\n &::-webkit-scrollbar {\n width: 6px;\n }\n \n &::-webkit-scrollbar-track {\n border-radius: 6px;\n }\n \n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .3);\n border-radius: 6px;\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\n }\n }\n }\n\n}","@keyframes float-in {\n 0% {\n transform: translateY(0.5rem);\n opacity: 0;\n }\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n}\n\n@keyframes float-out {\n 0% {\n transform: translateY(0);\n opacity: 1;\n }\n\t100% {\n\t\ttransform: translateY(0.5rem);\n\t\topacity: 0;\n\t}\n}\n\n.page-content {\n .headerlink {\n display: inline-block;\n text-decoration: none;\n margin-left: 0.8rem;\n color: inherit;\n opacity: 0;\n &:hover {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n\n h1, h2, h3, h4, h5, h6 {\n .toc-backref {\n text-decoration: none;\n }\n &:hover {\n .headerlink {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n }\n\n h1 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n\n h2 {\n font-size: 1.75rem;\n line-height: 2rem;\n padding-top: 1.5rem;\n margin-top: 0;\n margin-bottom: 1rem;\n }\n\n h3 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding-top: 1rem;\n margin-top: 0px;\n margin-bottom: .75rem;\n }\n\n h4 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n padding-top: .75rem;\n margin-top: 0px;\n margin-bottom: .5rem;\n }\n\n div.page-content h5 {\n font-size: 1.1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n div.page-content h6 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n\n}\n","\n/*\n * Admonition Styles\n */\n $admonitions: (\n hint: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"help_outline\"\n ),\n note: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"info_outline\"\n ),\n seealso: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"search\"\n ),\n warning: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n attention: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n tip: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"lightbulb_outline\"\n ),\n important: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"check_circle\"\n ),\n error: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n caution: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n danger: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n )\n);\n\n @mixin admonition-style($type) {\n border-left: solid 4px map-get(map-get($admonitions, $type), font-color);\n background-color: map-get(map-get($admonitions, $type), background-color);\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: map-get(map-get($admonitions, $type), font-color);\n\n margin-top: 4px;\n margin-bottom: 8px;\n &::before {\n @extend .material-icons;\n position: relative;\n margin-right: 5px;\n top: 3px;\n content: map-get(map-get($admonitions, $type), icon-content);\n font-size: 18px;\n }\n }\n}\n\n.admonition {\n @extend .mdl-shadow--2dp;\n\n padding: 12px 20px;\n margin-top: 10px;\n margin-bottom: 10px;\n p.last {\n margin: 16px;\n }\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: #555;\n text-transform: uppercase;\n margin-top: 7px;\n }\n\n @each $type in (note, seealso, hint, warning, attention, tip, important, error, caution, danger) {\n &.#{$type} {\n @include admonition-style($type);\n }\n }\n}\n",".page-content {\n .highlight {\n margin: 1px 0;\n pre {\n background: $code_background;\n color: rgba(0,0,0,.87);\n font-family: $code_font_family;\n padding: 0.75rem;\n overflow: auto;\n overflow-y: hidden;\n .o, .nd {\n color: rgba(0,0,0,.87);\n }\n }\n }\n\n div.highlight-console div.highlight {\n background: none;\n }\n\n // for jupyter notebook output cell\n .output {\n .highlight {\n pre {\n color: rgba(0,0,0,.87);\n background: $background_color;\n border-width: 1px;\n border-color: #999;\n border-style: solid;\n padding: 0.75rem;\n }\n }\n }\n\n .code, code:not(.download) {\n margin: 0 0;\n font-family: $code_font_family;\n border-radius: 2px;\n span.pre {\n font-family: $code_font_family;\n }\n }\n\n .viewcode-link {\n padding-left: 2em;\n font-size: 80%;\n }\n\n .rubric, .method > dt, .function > dt, .class > dt {\n display: table;\n margin: 10px 0;\n font-size: 100%;\n line-height: normal;\n background: #e7f2fa;\n color: #2B98F0;\n border-top: solid 3px #55ADF3;\n padding: 10px;\n position: relative;\n .descname, .descclassname {\n color: rgba(0,0,0,.87);\n background: #e7f2fa;\n padding: 3px;\n }\n em {\n padding: 0 2px;\n }\n }\n\n\n .rubric {\n margin: 30px 0 10px 0;\n }\n\n\n .field-body {\n padding-left: 40px;\n ul {\n padding: 0 0 0 16px;\n margin: 0;\n }\n }\n\n // .docutils > dt {\n // padding: 6px;\n // display: table;\n // margin-bottom: 6px;\n // border: none;\n // border-left: solid 3px #ccc;\n // background: #f0f0f0;\n // color: #555;\n // }\n\n .seealso .docutils > dt {\n float: left;\n clear: left;\n padding: 0 6px;\n }\n\n .seealso .docutils > dd {\n padding-left: 6em;\n }\n .nblast {\n padding-bottom: 1em;\n }\n\n pre {\n font-size: 90%;\n background: #eee;\n color: #455A64;\n padding: 16px 32px;\n width: auto;\n border-radius: 4px;\n word-wrap: break-word;\n\n &:hover {\n @extend .mdl-shadow--2dp;\n\n &:before {\n font-family: $body_font_family;\n padding: 0 0.5rem;\n content: attr(click-to-copy);\n color: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n position: relative;\n float: right;\n top: -0.5rem;\n right: -0.5rem;\n background: rgb(200, 200, 200);\n font-size: 0.8rem;\n cursor: pointer;\n }\n }\n }\n}\n","/*\n * Quotation Block Styles\n */\n .page-content {\n blockquote {\n font-size: 1rem;\n padding: 0 1rem;\n border-left: 3px solid $code_background;\n\n &:after {\n content: \"\" !important;\n margin-left: 0;\n }\n &:before {\n content: \"\" !important;\n }\n }\n }\n",".page-content {\n table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) {\n @extend .mdl-data-table;\n @extend .mdl-shadow--2dp;\n\n margin: 1.5rem 0;\n table-layout: fixed;\n max-width: 100%;\n min-width: 70%;\n\n th, td {\n @extend .mdl-data-table__cell--non-numeric;\n white-space: normal;\n overflow-wrap: break-word;\n }\n\n caption {\n font-size: $font_size;\n margin: 1rem 0 0.8rem 0;\n white-space: normal;\n .caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n\n }\n}\n",".globaltoc {\n \n .caption, .toc {\n display: none;\n }\n\n ul {\n\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n min-height: 18px;\n .link-wrapper {\n display: flex;\n justify-content: space-between;\n > a {\n padding: 4px 0;\n display: block;\n width: 100%;\n font-size: 1rem;\n text-decoration: none;\n color: $layout-drawer-navigation-color;\n &.current {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .nav-toggle {\n padding: 0;\n float: right;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n > a {\n padding: 0;\n margin-left: 0;\n margin-right: 4px;\n cursor: pointer;\n > i {\n font-size: 18px;\n }\n }\n &.show {\n transform: rotateZ(180deg);\n > a {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n }\n\n nav {\n > ul > li > span.link-wrapper {\n padding-left: 8px;\n }\n > ul > li > ul > li > span.link-wrapper {\n padding-left: 16px;\n }\n > ul > li > ul > li > ul > li > span.link-wrapper {\n padding-left: 24px;\n }\n > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 32px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 40px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 48px;\n }\n }\n}\n",".localtoc {\n font-size: 0.75rem;\n padding-top: 1rem;\n\n .caption {\n padding-left: 12px;\n &-text {\n font-size: 0.9rem;\n font-weight: 700;\n }\n }\n\n > ul > li > a {\n display: none;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n }\n\n li {\n padding-left: 6px;\n }\n\n a {\n display: block;\n text-decoration: none;\n color: inherit;\n margin-top: 8px;\n padding-left: 8px;\n line-height: 1.1rem;\n \n &.current {\n padding-left: 5px;\n border-left: 3px solid;\n font-weight: bold;\n }\n }\n}","/*\r\n * Toctree and Contents Directive Styles\r\n */\r\n .toctree-wrapper,\r\n .contents.topic {\r\n border-left: 5px solid;\r\n }\r\n\r\n .toctree-wrapper > p.caption,\r\n .contents.topic > p.topic-title {\r\n color: rgb(117, 117, 117);\r\n font-size: 1rem;\r\n padding-left: 14px;\r\n }\r\n\r\n .toctree-wrapper ul,\r\n .contents.topic ul{\r\n padding-left: 14px;\r\n list-style: none;\r\n line-height: 30px;\r\n }\r\n\r\n .toctree-wrapper a,\r\n .contents.topic a {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n .pre {\r\n font-size: 1rem;\r\n }\r\n }\r\n\r\n .toctree-wrapper > ul > li > a,\r\n .contents.topic > ul > li > a {\r\n font-size: 1.3rem;\r\n .pre {\r\n font-size: 1.1rem;\r\n }\r\n }\r\n",".page-content {\n ul {\n li {\n margin: .3rem 0;\n p {\n margin: 0;\n }\n }\n }\n .option-list {\n .option {\n font-family: $code_font_family;\n }\n td {\n padding: 0.5rem;\n border: none;\n }\n }\n}\n","/*\r\n * Drawer Styles\r\n */\r\n.mdl-layout {\r\n &__drawer {\r\n background-color: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, .3);\r\n border-radius: 6px;\r\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\r\n }\r\n\r\n > .mdl-layout-title {\r\n font-weight: bold;\r\n text-align: right;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 32px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n min-height: 64px;\r\n .title {\r\n color: inherit;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n text-decoration: none;\r\n > img.logo {\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n &-text {\r\n font-weight: bold;\r\n text-align: right;\r\n padding: 0 10px;\r\n margin: 16px 0 8px 0;\r\n line-height: 32px;\r\n font-family: $body_font_family;\r\n color: inherit;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Header Styles\r\n */\r\n\r\nnav.breadcrumb {\r\n > a.mdl-navigation__link {\r\n padding: 0 8px;\r\n font-size: 18px;\r\n }\r\n @media (max-width: $lg-breakpoint - 1) {\r\n width: calc( 100% - 64px );\r\n a.mdl-navigation__link.is-active {\r\n overflow-x: hidden;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n a.mdl-navigation__link:not(.is-active),\r\n i.material-icons {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\ndiv.mdl-layout__header {\r\n margin-top: 77px;\r\n}\r\n\r\n.mdl-layout__drawer-button {\r\n top: 13px !important;\r\n}\r\n\r\ndiv.mdl-layout__header-row.header-links {\r\n background: rgba(255,255,255,0.2);\r\n width: 100%;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n\r\n a.mdl-navigation__link {\r\n font-size: 1rem;\r\n i {\r\n font-size: 1.2rem;\r\n margin: 0 8px;\r\n position: relative;\r\n bottom: -0.1rem;\r\n }\r\n };\r\n\r\n a.mdl-navigation__link:hover {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n color: #eeeeee;\r\n };\r\n a.mdl-navigation__link[href=\"#\"] {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n opacity: 1;\r\n color: #ffffff;\r\n };\r\n}\r\n\r\n/* mxnet-header */\r\n\r\n\r\n.site-title {\r\n font-weight: 300 !important;\r\n line-height: 57px;\r\n letter-spacing: -1px;\r\n margin-bottom: 0;\r\n float: left;\r\n color: white;\r\n\r\n &,\r\n &:visited {\r\n color: $grey-color-dark;\r\n }\r\n}\r\n\r\n\r\n.site-header {\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n min-height: 55px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n background-color: $color-mxnet;\r\n z-index: 10;\r\n font-weight: 300;\r\n font-size: 17px;\r\n border-bottom: 1px solid white;\r\n}\r\n\r\n.site-header-logo {\r\n width: 120px;\r\n display: initial;\r\n}\r\n\r\n.site-nav {\r\n float: right;\r\n line-height: 57px;\r\n\r\n .nav-trigger {\r\n display: none;\r\n }\r\n\r\n .menu-icon {\r\n display: none;\r\n }\r\n\r\n .page-link {\r\n color: white;\r\n line-height: 1.5;\r\n font-weight: 300;\r\n // Gaps between nav items, but not on the last one\r\n &:not(:last-child) {\r\n margin-right: 40px;\r\n }\r\n\r\n &:hover {\r\n color: white;\r\n text-shadow: -0.06ex 0 white, 0.06ex 0 white;\r\n }\r\n }\r\n\r\n .page-link.page-current {\r\n color: white;\r\n text-decoration: underline;\r\n }\r\n\r\n @media screen and (max-width: $on-laptop) {\r\n position: absolute;\r\n top: 9px;\r\n right: 15px;\r\n background-color: rgb(23,141,201);\r\n border-radius: 2px;\r\n text-align: right;\r\n\r\n label[for=\"nav-trigger\"] {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 36px;\r\n z-index: 2;\r\n cursor: pointer;\r\n }\r\n\r\n .menu-icon {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 26px;\r\n line-height: 0;\r\n padding-top: 20px;\r\n text-align: center;\r\n\r\n > svg {\r\n fill: white;\r\n }\r\n }\r\n\r\n input ~ .trigger {\r\n clear: both;\r\n display: none;\r\n }\r\n\r\n input:checked ~ .trigger {\r\n display: block;\r\n padding-bottom: 5px;\r\n }\r\n\r\n .page-link {\r\n padding: 5px 10px;\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n margin-right: 0;\r\n }\r\n\r\n margin-left: 20px;\r\n }\r\n }\r\n}","/*\r\n * Footer Styles\r\n */\r\nfooter.mdl-mini-footer {\r\n background-color: #212121;\r\n > div.mdl-mini-footer__left-section {\r\n margin-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n .mdl-logo {\r\n font-size: 1.1rem;\r\n }\r\n ul {\r\n @extend .mdl-mini-footer__link-list;\r\n }\r\n }\r\n > div.mdl-mini-footer__right-section {\r\n font-size: 0.9rem;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n a {\r\n color: inherit;\r\n font-weight: bold;\r\n text-decoration: none;\r\n }\r\n }\r\n p.caption {\r\n display: none;\r\n }\r\n}\r\n\r\n/*\r\n * Pagenation Block Styles\r\n */\r\n .pagenation {\r\n width: 100%;\r\n margin-top: 80px;\r\n height: 92px;\r\n background-color: #424242;\r\n display: flex;\r\n\r\n .button-common {\r\n text-transform: none;\r\n padding: 0;\r\n height: 92px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n }\r\n #button-prev {\r\n @extend .button-common;\r\n margin-right: auto;\r\n .pagenation-text {\r\n text-align: left;\r\n }\r\n \r\n }\r\n #button-next {\r\n @extend .button-common;\r\n margin-left: auto;\r\n flex-direction: row-reverse;\r\n .pagenation-text {\r\n text-align: right;\r\n }\r\n }\r\n\r\n &-arrow {\r\n &-L {\r\n margin-right: 20px;\r\n }\r\n &-R {\r\n margin-left: 20px;\r\n }\r\n }\r\n\r\n &-text {\r\n line-height: 30px;\r\n font-size: 20px;\r\n }\r\n\r\n &-direction {\r\n opacity: 0.7;\r\n font-size: 18px;\r\n }\r\n @media screen and (max-width: 1024px) {\r\n #button-prev {\r\n width: 20%;\r\n }\r\n \r\n #button-next {\r\n width: 80%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: none;\r\n }\r\n }\r\n @media screen and (min-width: 1025px) {\r\n #button-prev,\r\n #button-next {\r\n width: 50%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: block;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Site footer\r\n */\r\n.site-footer {\r\n border-top: 1px solid $grey-color-light;\r\n padding: $spacing-unit 0;\r\n background-color: #424242;\r\n position: relative;\r\n z-index: 10;\r\n .footer-category-title {\r\n color: $color-mxnet;\r\n }\r\n a {\r\n color: $grey-color-light !important;\r\n\r\n &:visited {\r\n color: $grey-color-light !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.site-footer2 {\r\n background-color: #424242;\r\n padding-top: 40px;\r\n padding-bottom: 10px;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n\r\n.footer-heading {\r\n margin-bottom: $spacing-unit / 2;\r\n}\r\n\r\n.contact-list,\r\n.social-media-list {\r\n list-style: none;\r\n margin-left: 0;\r\n}\r\n\r\n\r\n.footer-bottom-warning {\r\n font-size: 80%;\r\n color: white;\r\n float: left;\r\n}\r\n\r\n.footer-logo {\r\n width: 200px;\r\n margin-bottom: 30px;\r\n margin-top: 30px;\r\n}\r\n\r\n.footer-col {\r\n float: left;\r\n margin-bottom: $spacing-unit / 2;\r\n padding-left: $spacing-unit / 2;\r\n}\r\n\r\n.footer-text {\r\n color: $grey-color-light;\r\n}\r\n\r\n"," /*\r\n * Search Styles\r\n */\r\n#waterfall-exp::-webkit-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp:-ms-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp::-moz-placeholder {\r\n color: #ccc;\r\n}\r\n\r\nul.search span.highlighted {\r\n font-weight: bold;\r\n}\r\n\r\nul.search > li {\r\n margin-bottom: 24px;\r\n}\r\n\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n li {\r\n > a {\r\n text-decoration: none;\r\n font-size: 1.2rem;\r\n }\r\n }\r\n }\r\n}\r\n","a.download {\n &:before {\n @extend .material-icons;\n content: \"file_download\";\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n}\n\nbutton.download {\n position: sticky;\n margin-left: 1em;\n}\n",".mdl-card {\n margin: 1em 1.5em 1em 0;\n display: inline-block;\n width: 250px;\n min-height: 140px;\n padding: 18px;\n}\n.mdl-card:hover {\n box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 6px 6px rgba(0,0,0,0.22);\n color: #000;\n cursor: pointer;\n}\n.mdl-card__title {\n padding: 0 0 1em 0;\n font-size: 18px;\n color: #444;\n}\n\n.mdl-card__supporting-text {\n line-height: 1.5rem;\n padding: 0px;\n width: 100%;\n}\n\n.head-card.mdl-card {\n width: auto;\n display: block;\n max-width: 800px;\n padding: 24px;\n}\n\n.head-card > .mdl-card__title {\n padding-bottom: 0px;\n height: 60px;\n font-weight: 700;\n text-transform: uppercase;\n}\n.head-card > .mdl-card__menu {\n color: #fff;\n}\n.head-card > .mdl-card__actions {\n padding: 0;\n}\n.cards {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n"]} \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js index 1e1b2c5acf56..9d73a56b32fa 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js @@ -1,5 +1,7 @@ parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c0&&e(s.children))},upgradeAllRegistered:function(){for(var e=0;e0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)&&(e.keyCode===this.Keycodes_.UP_ARROW?(e.preventDefault(),t[t.length-1].focus()):e.keyCode===this.Keycodes_.DOWN_ARROW&&(e.preventDefault(),t[0].focus()))}},h.prototype.handleItemKeyboardEvent_=function(e){if(this.element_&&this.container_){var t=this.element_.querySelectorAll("."+this.CssClasses_.ITEM+":not([disabled])");if(t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)){var s=Array.prototype.slice.call(t).indexOf(e.target);if(e.keyCode===this.Keycodes_.UP_ARROW)e.preventDefault(),s>0?t[s-1].focus():t[t.length-1].focus();else if(e.keyCode===this.Keycodes_.DOWN_ARROW)e.preventDefault(),t.length>s+1?t[s+1].focus():t[0].focus();else if(e.keyCode===this.Keycodes_.SPACE||e.keyCode===this.Keycodes_.ENTER){e.preventDefault();var i=new MouseEvent("mousedown");e.target.dispatchEvent(i),i=new MouseEvent("mouseup"),e.target.dispatchEvent(i),e.target.click()}else e.keyCode===this.Keycodes_.ESCAPE&&(e.preventDefault(),this.hide())}}},h.prototype.handleItemClick_=function(e){e.target.hasAttribute("disabled")?e.stopPropagation():(this.closing_=!0,window.setTimeout(function(e){this.hide(),this.closing_=!1}.bind(this),this.Constant_.CLOSE_TIMEOUT))},h.prototype.applyClip_=function(e,t){this.element_.classList.contains(this.CssClasses_.UNALIGNED)?this.element_.style.clip="":this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?this.element_.style.clip="rect(0 "+t+"px 0 "+t+"px)":this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?this.element_.style.clip="rect("+e+"px 0 "+e+"px 0)":this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?this.element_.style.clip="rect("+e+"px "+t+"px "+e+"px "+t+"px)":this.element_.style.clip=""},h.prototype.removeAnimationEndListener_=function(e){e.target.classList.remove(h.prototype.CssClasses_.IS_ANIMATING)},h.prototype.addAnimationEndListener_=function(){this.element_.addEventListener("transitionend",this.removeAnimationEndListener_),this.element_.addEventListener("webkitTransitionEnd",this.removeAnimationEndListener_)},h.prototype.show=function(e){if(this.element_&&this.container_&&this.outline_){var t=this.element_.getBoundingClientRect().height,s=this.element_.getBoundingClientRect().width;this.container_.style.width=s+"px",this.container_.style.height=t+"px",this.outline_.style.width=s+"px",this.outline_.style.height=t+"px";for(var i=this.Constant_.TRANSITION_DURATION_SECONDS*this.Constant_.TRANSITION_DURATION_FRACTION,n=this.element_.querySelectorAll("."+this.CssClasses_.ITEM),a=0;a0&&this.showSnackbar(this.queuedNotifications_.shift())},u.prototype.cleanup_=function(){this.element_.classList.remove(this.cssClasses_.ACTIVE),setTimeout(function(){this.element_.setAttribute("aria-hidden","true"),this.textElement_.textContent="",Boolean(this.actionElement_.getAttribute("aria-hidden"))||(this.setActionHidden_(!0),this.actionElement_.textContent="",this.actionElement_.removeEventListener("click",this.actionHandler_)),this.actionHandler_=void 0,this.message_=void 0,this.actionText_=void 0,this.active=!1,this.checkQueue_()}.bind(this),this.Constant_.ANIMATION_LENGTH)},u.prototype.setActionHidden_=function(e){e?this.actionElement_.setAttribute("aria-hidden","true"):this.actionElement_.removeAttribute("aria-hidden")},i.register({constructor:u,classAsString:"MaterialSnackbar",cssClass:"mdl-js-snackbar",widget:!0});var E=function(e){this.element_=e,this.init()};window.MaterialSpinner=E,E.prototype.Constant_={MDL_SPINNER_LAYER_COUNT:4},E.prototype.CssClasses_={MDL_SPINNER_LAYER:"mdl-spinner__layer",MDL_SPINNER_CIRCLE_CLIPPER:"mdl-spinner__circle-clipper",MDL_SPINNER_CIRCLE:"mdl-spinner__circle",MDL_SPINNER_GAP_PATCH:"mdl-spinner__gap-patch",MDL_SPINNER_LEFT:"mdl-spinner__left",MDL_SPINNER_RIGHT:"mdl-spinner__right"},E.prototype.createLayer=function(e){var t=document.createElement("div");t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER),t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER+"-"+e);var s=document.createElement("div");s.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),s.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);var i=document.createElement("div");i.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);var n=document.createElement("div");n.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),n.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);for(var a=[s,i,n],l=0;l=this.maxRows&&e.preventDefault()},I.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},I.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},I.prototype.onReset_=function(e){this.updateClasses_()},I.prototype.updateClasses_=function(){this.checkDisabled(),this.checkValidity(),this.checkDirty(),this.checkFocus()},I.prototype.checkDisabled=function(){this.input_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},I.prototype.checkDisabled=I.prototype.checkDisabled,I.prototype.checkFocus=function(){Boolean(this.element_.querySelector(":focus"))?this.element_.classList.add(this.CssClasses_.IS_FOCUSED):this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},I.prototype.checkFocus=I.prototype.checkFocus,I.prototype.checkValidity=function(){this.input_.validity&&(this.input_.validity.valid?this.element_.classList.remove(this.CssClasses_.IS_INVALID):this.element_.classList.add(this.CssClasses_.IS_INVALID))},I.prototype.checkValidity=I.prototype.checkValidity,I.prototype.checkDirty=function(){this.input_.value&&this.input_.value.length>0?this.element_.classList.add(this.CssClasses_.IS_DIRTY):this.element_.classList.remove(this.CssClasses_.IS_DIRTY)},I.prototype.checkDirty=I.prototype.checkDirty,I.prototype.disable=function(){this.input_.disabled=!0,this.updateClasses_()},I.prototype.disable=I.prototype.disable,I.prototype.enable=function(){this.input_.disabled=!1,this.updateClasses_()},I.prototype.enable=I.prototype.enable,I.prototype.change=function(e){this.input_.value=e||"",this.updateClasses_()},I.prototype.change=I.prototype.change,I.prototype.init=function(){if(this.element_&&(this.label_=this.element_.querySelector("."+this.CssClasses_.LABEL),this.input_=this.element_.querySelector("."+this.CssClasses_.INPUT),this.input_)){this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)&&(this.maxRows=parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),10),isNaN(this.maxRows)&&(this.maxRows=this.Constant_.NO_MAX_ROWS)),this.input_.hasAttribute("placeholder")&&this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER),this.boundUpdateClassesHandler=this.updateClasses_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.boundResetHandler=this.onReset_.bind(this),this.input_.addEventListener("input",this.boundUpdateClassesHandler),this.input_.addEventListener("focus",this.boundFocusHandler),this.input_.addEventListener("blur",this.boundBlurHandler),this.input_.addEventListener("reset",this.boundResetHandler),this.maxRows!==this.Constant_.NO_MAX_ROWS&&(this.boundKeyDownHandler=this.onKeyDown_.bind(this),this.input_.addEventListener("keydown",this.boundKeyDownHandler));var e=this.element_.classList.contains(this.CssClasses_.IS_INVALID);this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED),e&&this.element_.classList.add(this.CssClasses_.IS_INVALID),this.input_.hasAttribute("autofocus")&&(this.element_.focus(),this.checkFocus())}},i.register({constructor:I,classAsString:"MaterialTextfield",cssClass:"mdl-js-textfield",widget:!0});var f=function(e){this.element_=e,this.init()};window.MaterialTooltip=f,f.prototype.Constant_={},f.prototype.CssClasses_={IS_ACTIVE:"is-active",BOTTOM:"mdl-tooltip--bottom",LEFT:"mdl-tooltip--left",RIGHT:"mdl-tooltip--right",TOP:"mdl-tooltip--top"},f.prototype.handleMouseEnter_=function(e){var t=e.target.getBoundingClientRect(),s=t.left+t.width/2,i=t.top+t.height/2,n=this.element_.offsetWidth/2*-1,a=this.element_.offsetHeight/2*-1;this.element_.classList.contains(this.CssClasses_.LEFT)||this.element_.classList.contains(this.CssClasses_.RIGHT)?(s=t.width/2,i+a<0?(this.element_.style.top="0",this.element_.style.marginTop="0"):(this.element_.style.top=i+"px",this.element_.style.marginTop=a+"px")):s+n<0?(this.element_.style.left="0",this.element_.style.marginLeft="0"):(this.element_.style.left=s+"px",this.element_.style.marginLeft=n+"px"),this.element_.classList.contains(this.CssClasses_.TOP)?this.element_.style.top=t.top-this.element_.offsetHeight-10+"px":this.element_.classList.contains(this.CssClasses_.RIGHT)?this.element_.style.left=t.left+t.width+10+"px":this.element_.classList.contains(this.CssClasses_.LEFT)?this.element_.style.left=t.left-this.element_.offsetWidth-10+"px":this.element_.style.top=t.top+t.height+10+"px",this.element_.classList.add(this.CssClasses_.IS_ACTIVE)},f.prototype.hideTooltip_=function(){this.element_.classList.remove(this.CssClasses_.IS_ACTIVE)},f.prototype.init=function(){if(this.element_){var e=this.element_.getAttribute("for")||this.element_.getAttribute("data-mdl-for");e&&(this.forElement_=document.getElementById(e)),this.forElement_&&(this.forElement_.hasAttribute("tabindex")||this.forElement_.setAttribute("tabindex","0"),this.boundMouseEnterHandler=this.handleMouseEnter_.bind(this),this.boundMouseLeaveAndScrollHandler=this.hideTooltip_.bind(this),this.forElement_.addEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("touchend",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("mouseleave",this.boundMouseLeaveAndScrollHandler,!1),window.addEventListener("scroll",this.boundMouseLeaveAndScrollHandler,!0),window.addEventListener("touchstart",this.boundMouseLeaveAndScrollHandler))}},i.register({constructor:f,classAsString:"MaterialTooltip",cssClass:"mdl-tooltip"});var b=function(e){this.element_=e,this.init()};window.MaterialLayout=b,b.prototype.Constant_={MAX_WIDTH:"(max-width: 1024px)",TAB_SCROLL_PIXELS:100,RESIZE_TIMEOUT:100,MENU_ICON:"",CHEVRON_LEFT:"chevron_left",CHEVRON_RIGHT:"chevron_right"},b.prototype.Keycodes_={ENTER:13,ESCAPE:27,SPACE:32},b.prototype.Mode_={STANDARD:0,SEAMED:1,WATERFALL:2,SCROLL:3},b.prototype.CssClasses_={CONTAINER:"mdl-layout__container",HEADER:"mdl-layout__header",DRAWER:"mdl-layout__drawer",CONTENT:"mdl-layout__content",DRAWER_BTN:"mdl-layout__drawer-button",ICON:"material-icons",JS_RIPPLE_EFFECT:"mdl-js-ripple-effect",RIPPLE_CONTAINER:"mdl-layout__tab-ripple-container",RIPPLE:"mdl-ripple",RIPPLE_IGNORE_EVENTS:"mdl-js-ripple-effect--ignore-events",HEADER_SEAMED:"mdl-layout__header--seamed",HEADER_WATERFALL:"mdl-layout__header--waterfall",HEADER_SCROLL:"mdl-layout__header--scroll",FIXED_HEADER:"mdl-layout--fixed-header",OBFUSCATOR:"mdl-layout__obfuscator",TAB_BAR:"mdl-layout__tab-bar",TAB_CONTAINER:"mdl-layout__tab-bar-container",TAB:"mdl-layout__tab",TAB_BAR_BUTTON:"mdl-layout__tab-bar-button",TAB_BAR_LEFT_BUTTON:"mdl-layout__tab-bar-left-button",TAB_BAR_RIGHT_BUTTON:"mdl-layout__tab-bar-right-button",TAB_MANUAL_SWITCH:"mdl-layout__tab-manual-switch",PANEL:"mdl-layout__tab-panel",HAS_DRAWER:"has-drawer",HAS_TABS:"has-tabs",HAS_SCROLLING_HEADER:"has-scrolling-header",CASTING_SHADOW:"is-casting-shadow",IS_COMPACT:"is-compact",IS_SMALL_SCREEN:"is-small-screen",IS_DRAWER_OPEN:"is-visible",IS_ACTIVE:"is-active",IS_UPGRADED:"is-upgraded",IS_ANIMATING:"is-animating",ON_LARGE_SCREEN:"mdl-layout--large-screen-only",ON_SMALL_SCREEN:"mdl-layout--small-screen-only"},b.prototype.contentScrollHandler_=function(){if(!this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)){var e=!this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN)||this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);this.content_.scrollTop>0&&!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.header_.classList.add(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING)):this.content_.scrollTop<=0&&this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.header_.classList.remove(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING))}},b.prototype.keyboardEventHandler_=function(e){e.keyCode===this.Keycodes_.ESCAPE&&this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)&&this.toggleDrawer()},b.prototype.screenSizeHandler_=function(){this.screenSizeMediaQuery_.matches?this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN):(this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN),this.drawer_&&(this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN),this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN)))},b.prototype.drawerToggleHandler_=function(e){if(e&&"keydown"===e.type){if(e.keyCode!==this.Keycodes_.SPACE&&e.keyCode!==this.Keycodes_.ENTER)return;e.preventDefault()}this.toggleDrawer()},b.prototype.headerTransitionEndHandler_=function(){this.header_.classList.remove(this.CssClasses_.IS_ANIMATING)},b.prototype.headerClickHandler_=function(){this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING))},b.prototype.resetTabState_=function(e){for(var t=0;t0?c.classList.add(this.CssClasses_.IS_ACTIVE):c.classList.remove(this.CssClasses_.IS_ACTIVE),this.tabBar_.scrollLeft0)return;this.setFrameCount(1);var s,i,n=e.currentTarget.getBoundingClientRect();if(0===e.clientX&&0===e.clientY)s=Math.round(n.width/2),i=Math.round(n.height/2);else{var a=void 0!==e.clientX?e.clientX:e.touches[0].clientX,l=void 0!==e.clientY?e.clientY:e.touches[0].clientY;s=Math.round(a-n.left),i=Math.round(l-n.top)}this.setRippleXY(s,i),this.setRippleStyles(!0),window.requestAnimationFrame(this.animFrameHandler.bind(this))}},y.prototype.upHandler_=function(e){e&&2!==e.detail&&window.setTimeout(function(){this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE)}.bind(this),0)},y.prototype.init=function(){if(this.element_){var e=this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)||(this.rippleElement_=this.element_.querySelector("."+this.CssClasses_.RIPPLE),this.frameCount_=0,this.rippleSize_=0,this.x_=0,this.y_=0,this.ignoringMouseDown_=!1,this.boundDownHandler=this.downHandler_.bind(this),this.element_.addEventListener("mousedown",this.boundDownHandler),this.element_.addEventListener("touchstart",this.boundDownHandler),this.boundUpHandler=this.upHandler_.bind(this),this.element_.addEventListener("mouseup",this.boundUpHandler),this.element_.addEventListener("mouseleave",this.boundUpHandler),this.element_.addEventListener("touchend",this.boundUpHandler),this.element_.addEventListener("blur",this.boundUpHandler),this.getFrameCount=function(){return this.frameCount_},this.setFrameCount=function(e){this.frameCount_=e},this.getRippleElement=function(){return this.rippleElement_},this.setRippleXY=function(e,t){this.x_=e,this.y_=t},this.setRippleStyles=function(t){if(null!==this.rippleElement_){var s,i,n="translate("+this.x_+"px, "+this.y_+"px)";t?(i=this.Constant_.INITIAL_SCALE,this.Constant_.INITIAL_SIZE):(i=this.Constant_.FINAL_SCALE,this.rippleSize_+"px",e&&(n="translate("+this.boundWidth/2+"px, "+this.boundHeight/2+"px)")),s="translate(-50%, -50%) "+n+i,this.rippleElement_.style.webkitTransform=s,this.rippleElement_.style.msTransform=s,this.rippleElement_.style.transform=s,t?this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING):this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING)}},this.animFrameHandler=function(){this.frameCount_-- >0?window.requestAnimationFrame(this.animFrameHandler.bind(this)):this.setRippleStyles(!1)})}},i.register({constructor:y,classAsString:"MaterialRipple",cssClass:"mdl-js-ripple-effect",widget:!1})}(); },{}],"QiIT":[function(require,module,exports) { @@ -698,6 +700,6 @@ var e=arguments[3];if(require("core-js/shim"),require("regenerator-runtime/runti },{"core-js/shim":"y1LN","regenerator-runtime/runtime":"VuXv","core-js/fn/regexp/escape":"Rlym"}],"sKvN":[function(require,module,exports) { "use strict";function t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function e(t,e){for(var n=0;ne+s+30}},{key:"toggleNavClass",value:function(t){if(window.onclickToc)window.onclickToc=!1;else{for(var e=0,n=$(),s=0,i=t.length;s'),l=e.children("a");e.append(n.append(l));var o=e.hasClass("current")&&!l.hasClass("current"),d=e.children("ul");if(d.length){var i="globalnav-".concat(a);d.attr("id",i),d.addClass("collapse");var s=$('');o?(d.addClass("show"),s.addClass("show")):d.hide(),e.append(n.append(s.append($('keyboard_arrow_down'))))).append(d)}}),$(".mdl-layout__drawer nav .nav-toggle a").click(function(){var a=$(this),t=a.attr("data-toggle");$("ul".concat(t)).toggleClass("show").animate({height:"toggle",opacity:"toggle"}),a.parent().toggleClass("show")}),e=$(".breadcrumb"),$("#waterfall-exp").focus(function(){$(window).width()<=1024&&e.hide()}).blur(function(){$(window).width()<=1024&&e.show()});new a.default({contentSelector:".page-content .section",navSelector:".localtoc a",scrollSelector:"main",className:"current",offsetTop:64});$(".mdl-layout__content").focus(),$(".mx-card").each(function(){$(this).addClass("mdl-card mdl-shadow--2dp")}),$(".mx-card .mx-card-title").each(function(){$(this).addClass("mdl-card__title")}),$(".mx-card .mx-card-text").each(function(){$(this).addClass("mdl-card__supporting-text")}),$(".mx-card-link").each(function(){$(this).hide()}),$(".mdl-card").each(function(){$(this).click(function(){var a=$(this).find(".mx-card-link").text();return a&&(window.location=a),!0})}),$("a.download").each(function(){var a=document.createElement("button");a.className="download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect";var t=document.createElement("i");t.className="material-icons";var e=document.createTextNode("file_download");t.appendChild(e),a.appendChild(t);var n=$(this).attr("href");a.onclick=function(){window.location=n};var l=n.split("/").slice(-1).pop();a.id=l?l.replace(".","-"):"download-button-"+$(this).index();var o=document.createElement("div");o.className="mdl-tooltip",o.setAttribute("data-mdl-for",a.id);var d=$(this).find("span.pre").map(function(){return $(this).text()}).get().join(" ");o.innerHTML=d,componentHandler.upgradeElement(a),$(this).remove();var i=$(".section h1").first();i.append(a),i.append(o)}),$(".mdl-layout").css("visibility","visible")}); -},{"../scss/sphinx_materialdesign_theme.scss":"BS4D","material-design-lite":"vKy7","babel-polyfill":"zUFY","./scrollspy":"sKvN"}]},{},["brfV"], null) +"use strict";require("../scss/sphinx_materialdesign_theme.scss"),require("./feedback"),require("material-design-lite"),require("babel-polyfill");var a=t(require("./scrollspy"));function t(a){return a&&a.__esModule?a:{default:a}}$(function(){var t,e;t=$(".mdl-layout__drawer nav").find("li"),$.each(t,function(a,t){var e=$(t),n=$(''),l=e.children("a");e.append(n.append(l));var o=e.hasClass("current")&&!l.hasClass("current"),d=e.children("ul");if(d.length){var s="globalnav-".concat(a);d.attr("id",s),d.addClass("collapse");var i=$('');o?(d.addClass("show"),i.addClass("show")):d.hide(),e.append(n.append(i.append($('keyboard_arrow_down'))))).append(d)}}),$(".mdl-layout__drawer nav .nav-toggle a").click(function(){var a=$(this),t=a.attr("data-toggle");$("ul".concat(t)).toggleClass("show").animate({height:"toggle",opacity:"toggle"}),a.parent().toggleClass("show")}),e=$(".breadcrumb"),$("#waterfall-exp").focus(function(){$(window).width()<=1024&&e.hide()}).blur(function(){$(window).width()<=1024&&e.show()});new a.default({contentSelector:".page-content .section",navSelector:".localtoc a",scrollSelector:"main",className:"current",offsetTop:64});$(".mdl-layout__content").focus(),$(".mx-card").each(function(){$(this).addClass("mdl-card mdl-shadow--2dp")}),$(".mx-card .mx-card-title").each(function(){$(this).addClass("mdl-card__title")}),$(".mx-card .mx-card-text").each(function(){$(this).addClass("mdl-card__supporting-text")}),$(".mx-card-link").each(function(){$(this).hide()}),$(".mdl-card").each(function(){$(this).click(function(){var a=$(this).find(".mx-card-link").text();return a&&(window.location=a),!0})}),$("a.download").each(function(){var a=document.createElement("button");a.className="download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect";var t=document.createElement("i");t.className="material-icons";var e=document.createTextNode("file_download");t.appendChild(e),a.appendChild(t);var n=$(this).attr("href");a.onclick=function(){window.location=n};var l=n.split("/").slice(-1).pop();a.id=l?l.replace(".","-"):"download-button-"+$(this).index();var o=document.createElement("div");o.className="mdl-tooltip",o.setAttribute("data-mdl-for",a.id);var d=$(this).find("span.pre").map(function(){return $(this).text()}).get().join(" ");o.innerHTML=d,componentHandler.upgradeElement(a),$(this).remove();var s=$(".section h1").first();s.append(a),s.append(o)}),$(".mdl-layout").css("visibility","visible");!function(){var a,t=0,e=$("main.mdl-layout__content");e.focus();var n=$("header.mdl-layout__header"),l=n.height();e.scroll(function(){t=e.scrollTop(),al?n.addClass("scrollUp"):a>t&&!(t<=l)&&n.removeClass("scrollUp"),a=t})}()}); +},{"../scss/sphinx_materialdesign_theme.scss":"BS4D","./feedback":"dMzA","material-design-lite":"vKy7","babel-polyfill":"zUFY","./scrollspy":"sKvN"}]},{},["brfV"], null) //# sourceMappingURL=/sphinx_materialdesign_theme.js.map \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map index 2fbcdbb2aa74..c8e0635f4aa7 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.js.map @@ -1 +1 @@ -{"version":3,"sources":["ripple.js","tabs.js","layout.js","mdlComponentHandler.js","rAF.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","snackbar.js","spinner.js","switch.js","textfield.js","tooltip.js","data-table.js","../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_function-to-string.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/es6.object.create.js","../../node_modules/core-js/modules/es6.object.define-property.js","../../node_modules/core-js/modules/es6.object.define-properties.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/es6.object.set-prototype-of.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/es6.object.to-string.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.function.bind.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.function.has-instance.js","../../node_modules/core-js/modules/_string-ws.js","../../node_modules/core-js/modules/_string-trim.js","../../node_modules/core-js/modules/_parse-int.js","../../node_modules/core-js/modules/es6.parse-int.js","../../node_modules/core-js/modules/_parse-float.js","../../node_modules/core-js/modules/es6.parse-float.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/es6.number.constructor.js","../../node_modules/core-js/modules/_a-number-value.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.number.to-fixed.js","../../node_modules/core-js/modules/es6.number.to-precision.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.parse-float.js","../../node_modules/core-js/modules/es6.number.parse-int.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.trim.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.string.iterator.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/_string-html.js","../../node_modules/core-js/modules/es6.string.anchor.js","../../node_modules/core-js/modules/es6.string.big.js","../../node_modules/core-js/modules/es6.string.blink.js","../../node_modules/core-js/modules/es6.string.bold.js","../../node_modules/core-js/modules/es6.string.fixed.js","../../node_modules/core-js/modules/es6.string.fontcolor.js","../../node_modules/core-js/modules/es6.string.fontsize.js","../../node_modules/core-js/modules/es6.string.italics.js","../../node_modules/core-js/modules/es6.string.link.js","../../node_modules/core-js/modules/es6.string.small.js","../../node_modules/core-js/modules/es6.string.strike.js","../../node_modules/core-js/modules/es6.string.sub.js","../../node_modules/core-js/modules/es6.string.sup.js","../../node_modules/core-js/modules/es6.date.now.js","../../node_modules/core-js/modules/es6.date.to-json.js","../../node_modules/core-js/modules/_date-to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-string.js","../../node_modules/core-js/modules/_date-to-primitive.js","../../node_modules/core-js/modules/es6.date.to-primitive.js","../../node_modules/core-js/modules/es6.array.is-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/_strict-method.js","../../node_modules/core-js/modules/es6.array.join.js","../../node_modules/core-js/modules/es6.array.slice.js","../../node_modules/core-js/modules/es6.array.sort.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/es6.array.for-each.js","../../node_modules/core-js/modules/es6.array.map.js","../../node_modules/core-js/modules/es6.array.filter.js","../../node_modules/core-js/modules/es6.array.some.js","../../node_modules/core-js/modules/es6.array.every.js","../../node_modules/core-js/modules/_array-reduce.js","../../node_modules/core-js/modules/es6.array.reduce.js","../../node_modules/core-js/modules/es6.array.reduce-right.js","../../node_modules/core-js/modules/es6.array.index-of.js","../../node_modules/core-js/modules/es6.array.last-index-of.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.array.species.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.constructor.js","../../node_modules/core-js/modules/_regexp-exec.js","../../node_modules/core-js/modules/es6.regexp.exec.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/es6.regexp.to-string.js","../../node_modules/core-js/modules/_advance-string-index.js","../../node_modules/core-js/modules/_regexp-exec-abstract.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/es6.typed.data-view.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.enumerate.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_flatten-into-array.js","../../node_modules/core-js/modules/es7.array.flat-map.js","../../node_modules/core-js/modules/es7.array.flatten.js","../../node_modules/core-js/modules/es7.string.at.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/es7.string.trim-left.js","../../node_modules/core-js/modules/es7.string.trim-right.js","../../node_modules/core-js/modules/es7.string.match-all.js","../../node_modules/core-js/modules/es7.symbol.async-iterator.js","../../node_modules/core-js/modules/es7.symbol.observable.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/_object-forced-pam.js","../../node_modules/core-js/modules/es7.object.define-getter.js","../../node_modules/core-js/modules/es7.object.define-setter.js","../../node_modules/core-js/modules/es7.object.lookup-getter.js","../../node_modules/core-js/modules/es7.object.lookup-setter.js","../../node_modules/core-js/modules/_array-from-iterable.js","../../node_modules/core-js/modules/_collection-to-json.js","../../node_modules/core-js/modules/es7.map.to-json.js","../../node_modules/core-js/modules/es7.set.to-json.js","../../node_modules/core-js/modules/_set-collection-of.js","../../node_modules/core-js/modules/es7.map.of.js","../../node_modules/core-js/modules/es7.set.of.js","../../node_modules/core-js/modules/es7.weak-map.of.js","../../node_modules/core-js/modules/es7.weak-set.of.js","../../node_modules/core-js/modules/_set-collection-from.js","../../node_modules/core-js/modules/es7.map.from.js","../../node_modules/core-js/modules/es7.set.from.js","../../node_modules/core-js/modules/es7.weak-map.from.js","../../node_modules/core-js/modules/es7.weak-set.from.js","../../node_modules/core-js/modules/es7.global.js","../../node_modules/core-js/modules/es7.system.global.js","../../node_modules/core-js/modules/es7.error.is-error.js","../../node_modules/core-js/modules/es7.math.clamp.js","../../node_modules/core-js/modules/es7.math.deg-per-rad.js","../../node_modules/core-js/modules/es7.math.degrees.js","../../node_modules/core-js/modules/_math-scale.js","../../node_modules/core-js/modules/es7.math.fscale.js","../../node_modules/core-js/modules/es7.math.iaddh.js","../../node_modules/core-js/modules/es7.math.isubh.js","../../node_modules/core-js/modules/es7.math.imulh.js","../../node_modules/core-js/modules/es7.math.rad-per-deg.js","../../node_modules/core-js/modules/es7.math.radians.js","../../node_modules/core-js/modules/es7.math.scale.js","../../node_modules/core-js/modules/es7.math.umulh.js","../../node_modules/core-js/modules/es7.math.signbit.js","../../node_modules/core-js/modules/es7.promise.finally.js","../../node_modules/core-js/modules/es7.promise.try.js","../../node_modules/core-js/modules/_metadata.js","../../node_modules/core-js/modules/es7.reflect.define-metadata.js","../../node_modules/core-js/modules/es7.reflect.delete-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.has-metadata.js","../../node_modules/core-js/modules/es7.reflect.has-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.metadata.js","../../node_modules/core-js/modules/es7.asap.js","../../node_modules/core-js/modules/es7.observable.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/core-js/shim.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/core-js/modules/_replacer.js","../../node_modules/core-js/modules/core.regexp.escape.js","../../node_modules/core-js/fn/regexp/escape.js","../../node_modules/babel-polyfill/lib/index.js","scrollspy.js","sphinx_materialdesign_theme.js"],"names":["MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","document","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","getAttribute","charAt","preventDefault","href","split","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","selectTab","content_","IS_ACTIVE","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","TAB_MANUAL_SWITCH","show","componentHandler","upgradeDom","optJsClass","optCssClass","upgradeElement","element","upgradeElements","elements","upgradeAllRegistered","registerUpgradedCallback","jsClass","callback","register","config","downgradeElements","nodes","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","getUpgradedListOfElement_","dataUpgraded","isElementUpgraded_","upgradedList","indexOf","createEvent_","eventType","bubbles","cancelable","window","CustomEvent","ev","createEvent","initEvent","upgradeDomInternal","cssClass","registeredClass","querySelectorAll","n","upgradeElementInternal","Element","Error","upgradingEv","dispatchEvent","defaultPrevented","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","upgradedEv","deconstructComponentInternal","componentIndex","splice","upgrades","componentPlace","classAsString","upgradeElementsInternal","Array","isArray","prototype","slice","call","HTMLElement","children","upgradeAllRegisteredInternal","registerUpgradedCallbackInternal","regClass","registerInternal","widgetMissing","newConfig","constructor","item","hasOwnProperty","downgradeNodesInternal","downgradeNode","node","filter","NodeList","Node","ComponentConfigPublic","ComponentConfig","Component","documentElement","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","MaterialButton","this","init","Constant_","RIPPLE_EFFECT","blurHandler_","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","remove","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","parentElement","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","items","boundItemKeydown_","handleItemKeyboardEvent_","boundItemClick_","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","removeAnimationEndListener_","addAnimationEndListener_","transitionDuration","itemDelay","transitionDelay","parentNode","removeEventListener","removeProperty","MaterialProgress","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","btnElement_","onMouseup_","boundChangeHandler_","boundFocusHandler_","boundBlurHandler_","boundMouseUpHandler_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSnackbar","textElement_","cssClasses_","MESSAGE","actionElement_","ACTION","active","actionHandler_","undefined","message_","actionText_","queuedNotifications_","setActionHidden_","ANIMATION_LENGTH","SNACKBAR","ACTIVE","displaySnackbar_","textContent","cleanup_","timeout_","showSnackbar","data","checkQueue_","shift","Boolean","removeAttribute","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","index","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","start","MaterialSwitch","TRACK","THUMB","on","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","HAS_PLACEHOLDER","onKeyDown_","currentRowCount","onReset_","checkValidity","checkDirty","checkFocus","input_","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundResetHandler","boundKeyDownHandler","invalid","MaterialTooltip","BOTTOM","LEFT","RIGHT","TOP","handleMouseEnter_","props","marginLeft","offsetWidth","marginTop","hideTooltip_","boundMouseEnterHandler","boundMouseLeaveAndScrollHandler","MaterialLayout","MAX_WIDTH","TAB_SCROLL_PIXELS","RESIZE_TIMEOUT","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","headerVisible","scrollTop","keyboardEventHandler_","drawer_","toggleDrawer","screenSizeHandler_","screenSizeMediaQuery_","matches","obfuscator_","drawerToggleHandler_","type","headerTransitionEndHandler_","headerClickHandler_","tabBar","drawerButton","focusedElement","directChildren","childNodes","numChildren","c","child","persisted","overflowY","mode","drawerButtonIcon","innerHTML","firstChild","obfuscator","matchMedia","addListener","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabUpdateHandler","scrollWidth","windowResizeHandler","resizeTimeoutId_","MaterialDataTable","DATA_TABLE","SELECTABLE","SELECT_ELEMENT","IS_SELECTED","selectRow_","checkbox","row","opt_rows","createCheckbox_","label","labelClasses","firstHeader","bodyRows","footRows","rows","concat","th","headerCheckbox","firstCell","td","nodeName","toUpperCase","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","offset","webkitTransform","msTransform","transform","ScrollSpy","args","doc","nav","navSelector","win","winHeight","innerHeight","scrollElement","scrollSelector","contents","getContents","contentSelector","attachEvent","scrollTimer","resizeTimer","spy","tagName","onclickToc","navElement","targets","getViewState","toggleNavClass","elementListInView","current","isView","subHeaderRect","headerHeight","scrollBottom","elementTop","elementBottom","maxDepth","maxDepthElement","$","tempDepth","getTagDepth","id","find","get","reconstructionDrawerGlobalToc","$lists","$breadcrumb","each","li","$li","$linkWrapper","$link","append","isCurrent","hasClass","$ul","ulId","attr","addClass","$toggleWrapper","$toggle","toggleClass","animate","opacity","parent","url","text","location","button","icon","createTextNode","link","onclick","fileName","pop","replace","hint","hintText","map","header","first","css"],"mappings":"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","file":"sphinx_materialdesign_theme.js","sourceRoot":"../../src/js","sourcesContent":["/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRipple'] = MaterialRipple;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n/**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function (event) {\n if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n var rect = this.element_.getBoundingClientRect();\n this.boundHeight = rect.height;\n this.boundWidth = rect.width;\n this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n this.ignoringMouseDown_ = false;\n } else {\n if (event.type === 'touchstart') {\n this.ignoringMouseDown_ = true;\n }\n var frameCount = this.getFrameCount();\n if (frameCount > 0) {\n return;\n }\n this.setFrameCount(1);\n var bound = event.currentTarget.getBoundingClientRect();\n var x;\n var y;\n // Check if we are handling a keyboard click.\n if (event.clientX === 0 && event.clientY === 0) {\n x = Math.round(bound.width / 2);\n y = Math.round(bound.height / 2);\n } else {\n var clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY !== undefined ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n/**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function (event) {\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n // Allow a repaint to occur before removing this class, so the animation\n // shows for tap events, which seem to trigger a mouseup too soon after\n // mousedown.\n window.setTimeout(function () {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }.bind(this), 0);\n }\n};\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function () {\n if (this.element_) {\n var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n // Touch start produces a compat mouse down event, which would cause a\n // second ripples. To avoid that, we use this property to ignore the first\n // mouse down after a touch start.\n this.ignoringMouseDown_ = false;\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown', this.boundDownHandler);\n this.element_.addEventListener('touchstart', this.boundDownHandler);\n this.boundUpHandler = this.upHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundUpHandler);\n this.element_.addEventListener('mouseleave', this.boundUpHandler);\n this.element_.addEventListener('touchend', this.boundUpHandler);\n this.element_.addEventListener('blur', this.boundUpHandler);\n /**\n * Getter for frameCount_.\n * @return {number} the frame count.\n */\n this.getFrameCount = function () {\n return this.frameCount_;\n };\n /**\n * Setter for frameCount_.\n * @param {number} fC the frame count.\n */\n this.setFrameCount = function (fC) {\n this.frameCount_ = fC;\n };\n /**\n * Getter for rippleElement_.\n * @return {Element} the ripple element.\n */\n this.getRippleElement = function () {\n return this.rippleElement_;\n };\n /**\n * Sets the ripple X and Y coordinates.\n * @param {number} newX the new X coordinate\n * @param {number} newY the new Y coordinate\n */\n this.setRippleXY = function (newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\n /**\n * Sets the ripple styles.\n * @param {boolean} start whether or not this is the start frame.\n */\n this.setRippleStyles = function (start) {\n if (this.rippleElement_ !== null) {\n var transformString;\n var scale;\n var size;\n var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n if (start) {\n scale = this.Constant_.INITIAL_SCALE;\n size = this.Constant_.INITIAL_SIZE;\n } else {\n scale = this.Constant_.FINAL_SCALE;\n size = this.rippleSize_ + 'px';\n if (recentering) {\n offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n }\n }\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n if (start) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n } else {\n this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n };\n /**\n * Handles an animation frame.\n */\n this.animFrameHandler = function () {\n if (this.frameCount_-- > 0) {\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n } else {\n this.setRippleStyles(false);\n }\n };\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n MDL_RIPPLE: 'mdl-ripple',\n MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n * Handle clicks to a tabs component\n *\n * @private\n */\nMaterialTabs.prototype.initTabs_ = function () {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n // Create new tabs for each tab element\n for (var i = 0; i < this.tabs_.length; i++) {\n new MaterialTab(this.tabs_[i], this);\n }\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetTabState_ = function () {\n for (var k = 0; k < this.tabs_.length; k++) {\n this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function () {\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Initialize element.\n */\nMaterialTabs.prototype.init = function () {\n if (this.element_) {\n this.initTabs_();\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {Element} tab The HTML element for the tab.\n * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n */\nfunction MaterialTab(tab, ctx) {\n if (tab) {\n if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = ctx.element_.querySelector('#' + href);\n ctx.resetTabState_();\n ctx.resetPanelState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n }\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialLayout'] = MaterialLayout;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n RESIZE_TIMEOUT: 100,\n MENU_ICON: '',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32\n};\n/**\n * Modes.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialLayout.prototype.CssClasses_ = {\n CONTAINER: 'mdl-layout__container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n ICON: 'material-icons',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n RIPPLE: 'mdl-ripple',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n TAB_BAR: 'mdl-layout__tab-bar',\n TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n TAB: 'mdl-layout__tab',\n TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n TAB_MANUAL_SWITCH: 'mdl-layout__tab-manual-switch',\n PANEL: 'mdl-layout__tab-panel',\n HAS_DRAWER: 'has-drawer',\n HAS_TABS: 'has-tabs',\n HAS_SCROLLING_HEADER: 'has-scrolling-header',\n CASTING_SHADOW: 'is-casting-shadow',\n IS_COMPACT: 'is-compact',\n IS_SMALL_SCREEN: 'is-small-screen',\n IS_DRAWER_OPEN: 'is-visible',\n IS_ACTIVE: 'is-active',\n IS_UPGRADED: 'is-upgraded',\n IS_ANIMATING: 'is-animating',\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n * Handles scrolling on the content.\n *\n * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n var headerVisible = !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) || this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n};\n/**\n * Handles a keyboard event on the drawer.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.keyboardEventHandler_ = function (evt) {\n // Only react when the drawer is open.\n if (evt.keyCode === this.Keycodes_.ESCAPE && this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.toggleDrawer();\n }\n};\n/**\n * Handles changes in screen size.\n *\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n if (this.screenSizeMediaQuery_.matches) {\n this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n // Collapse drawer (if any) when moving to a large screen size.\n if (this.drawer_) {\n this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n }\n }\n};\n/**\n * Handles events of drawer button.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function (evt) {\n if (evt && evt.type === 'keydown') {\n if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n // prevent scrolling in drawer nav\n evt.preventDefault();\n } else {\n // prevent other keys\n return;\n }\n }\n this.toggleDrawer();\n};\n/**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n * Handles expanding the header on click\n *\n * @private\n */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n for (var k = 0; k < tabBar.length; k++) {\n tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Toggle drawer state\n *\n * @public\n */\nMaterialLayout.prototype.toggleDrawer = function () {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n // Set accessibility properties.\n if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.drawer_.setAttribute('aria-hidden', 'false');\n drawerButton.setAttribute('aria-expanded', 'true');\n } else {\n this.drawer_.setAttribute('aria-hidden', 'true');\n drawerButton.setAttribute('aria-expanded', 'false');\n }\n};\nMaterialLayout.prototype['toggleDrawer'] = MaterialLayout.prototype.toggleDrawer;\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function () {\n if (this.element_) {\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n var focusedElement = this.element_.querySelector(':focus');\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n if (focusedElement) {\n focusedElement.focus();\n }\n var directChildren = this.element_.childNodes;\n var numChildren = directChildren.length;\n for (var c = 0; c < numChildren; c++) {\n var child = directChildren[c];\n if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n window.addEventListener('pageshow', function (e) {\n if (e.persisted) {\n // when page is loaded from back/forward cache\n // trigger repaint to let layout scroll in safari\n this.element_.style.overflowY = 'hidden';\n requestAnimationFrame(function () {\n this.element_.style.overflowY = '';\n }.bind(this));\n }\n }.bind(this), false);\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n var mode = this.Mode_.STANDARD;\n if (this.header_) {\n if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n mode = this.Mode_.SEAMED;\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\n if (mode === this.Mode_.STANDARD) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.WATERFALL) {\n // Add and remove shadows depending on scroll position.\n // Also add/remove auxiliary class for styling of the compact version of\n // the header.\n this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n if (!drawerButton) {\n drawerButton = document.createElement('div');\n drawerButton.setAttribute('aria-expanded', 'false');\n drawerButton.setAttribute('role', 'button');\n drawerButton.setAttribute('tabindex', '0');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n }\n if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n }\n drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n drawerButton.addEventListener('keydown', this.drawerToggleHandler_.bind(this));\n // Add a class if the layout has a drawer, for altering the left padding.\n // Adds the HAS_DRAWER to the elements since this.header_ may or may\n // not be present.\n this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n // If we have a fixed header, add the button to the header rather than\n // the layout.\n if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n this.header_.insertBefore(drawerButton, this.header_.firstChild);\n } else {\n this.element_.insertBefore(drawerButton, this.content_);\n }\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.element_.appendChild(obfuscator);\n obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n this.obfuscator_ = obfuscator;\n this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n this.drawer_.setAttribute('aria-hidden', 'true');\n }\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n var tabContainer = document.createElement('div');\n tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n this.header_.insertBefore(tabContainer, this.tabBar_);\n this.header_.removeChild(this.tabBar_);\n var leftButton = document.createElement('div');\n leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n var leftButtonIcon = document.createElement('i');\n leftButtonIcon.classList.add(this.CssClasses_.ICON);\n leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n leftButton.appendChild(leftButtonIcon);\n leftButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n var rightButton = document.createElement('div');\n rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n var rightButtonIcon = document.createElement('i');\n rightButtonIcon.classList.add(this.CssClasses_.ICON);\n rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n rightButton.appendChild(rightButtonIcon);\n rightButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n // Add and remove tab buttons depending on scroll position and total\n // window size.\n var tabUpdateHandler = function () {\n if (this.tabBar_.scrollLeft > 0) {\n leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n }.bind(this);\n this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n tabUpdateHandler();\n // Update tabs when the window resizes.\n var windowResizeHandler = function () {\n // Use timeouts to make sure it doesn't happen too often.\n if (this.resizeTimeoutId_) {\n clearTimeout(this.resizeTimeoutId_);\n }\n this.resizeTimeoutId_ = setTimeout(function () {\n tabUpdateHandler();\n this.resizeTimeoutId_ = null;\n }.bind(this), this.Constant_.RESIZE_TIMEOUT);\n }.bind(this);\n window.addEventListener('resize', windowResizeHandler);\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n // Create new tabs for each tab element\n for (var i = 0; i < tabs.length; i++) {\n new MaterialLayoutTab(tabs[i], tabs, panels, this);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {HTMLElement} tab The HTML element for the tab.\n * @param {!Array} tabs Array with HTML elements for all tabs.\n * @param {!Array} panels Array with HTML elements for all panels.\n * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.\n */\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n /**\n * Auxiliary method to programmatically select a tab in the UI.\n */\n function selectTab() {\n var href = tab.href.split('#')[1];\n var panel = layout.content_.querySelector('#' + href);\n layout.resetTabState_(tabs);\n layout.resetPanelState_(panels);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n }\n if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(layout.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n if (!layout.tabBar_.classList.contains(layout.CssClasses_.TAB_MANUAL_SWITCH)) {\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n selectTab();\n }\n });\n }\n tab.show = selectTab;\n}\nwindow['MaterialLayoutTab'] = MaterialLayoutTab;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the componentHandler interface, for closure documentation and\n// static verification.\nvar componentHandler = {\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n upgradeDom: function(optJsClass, optCssClass) {},\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n upgradeElement: function(element, optJsClass) {},\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n upgradeElements: function(elements) {},\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n upgradeAllRegistered: function() {},\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n registerUpgradedCallback: function(jsClass, callback) {},\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config the registration configuration\n */\n register: function(config) {},\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function() {\n 'use strict';\n\n /** @type {!Array} */\n var registeredComponents_ = [];\n\n /** @type {!Array} */\n var createdComponents_ = [];\n\n var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n /**\n * Searches registered components for a class we are interested in using.\n * Optionally replaces a match with passed object if specified.\n *\n * @param {string} name The name of a class we want to use.\n * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n * @return {!Object|boolean}\n * @private\n */\n function findRegisteredClass_(name, optReplace) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n if (registeredComponents_[i].className === name) {\n if (typeof optReplace !== 'undefined') {\n registeredComponents_[i] = optReplace;\n }\n return registeredComponents_[i];\n }\n }\n return false;\n }\n\n /**\n * Returns an array of the classNames of the upgraded classes on the element.\n *\n * @param {!Element} element The element to fetch data from.\n * @return {!Array}\n * @private\n */\n function getUpgradedListOfElement_(element) {\n var dataUpgraded = element.getAttribute('data-upgraded');\n // Use `['']` as default value to conform the `,name,name...` style.\n return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n }\n\n /**\n * Returns true if the given element has already been upgraded for the given\n * class.\n *\n * @param {!Element} element The element we want to check.\n * @param {string} jsClass The class to check for.\n * @returns {boolean}\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Create an event object.\n *\n * @param {string} eventType The type name of the event.\n * @param {boolean} bubbles Whether the event should bubble up the DOM.\n * @param {boolean} cancelable Whether the event can be canceled.\n * @returns {!Event}\n */\n function createEvent_(eventType, bubbles, cancelable) {\n if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n return new CustomEvent(eventType, {\n bubbles: bubbles,\n cancelable: cancelable\n });\n } else {\n var ev = document.createEvent('Events');\n ev.initEvent(eventType, bubbles, cancelable);\n return ev;\n }\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n function upgradeDomInternal(optJsClass, optCssClass) {\n if (typeof optJsClass === 'undefined' &&\n typeof optCssClass === 'undefined') {\n for (var i = 0; i < registeredComponents_.length; i++) {\n upgradeDomInternal(registeredComponents_[i].className,\n registeredComponents_[i].cssClass);\n }\n } else {\n var jsClass = /** @type {string} */ (optJsClass);\n if (typeof optCssClass === 'undefined') {\n var registeredClass = findRegisteredClass_(jsClass);\n if (registeredClass) {\n optCssClass = registeredClass.cssClass;\n }\n }\n\n var elements = document.querySelectorAll('.' + optCssClass);\n for (var n = 0; n < elements.length; n++) {\n upgradeElementInternal(elements[n], jsClass);\n }\n }\n }\n\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n // Allow upgrade to be canceled by canceling emitted event.\n var upgradingEv = createEvent_('mdl-componentupgrading', true, true);\n element.dispatchEvent(upgradingEv);\n if (upgradingEv.defaultPrevented) {\n return;\n }\n\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function(component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var upgradedEv = createEvent_('mdl-componentupgraded', true, false);\n element.dispatchEvent(upgradedEv);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (elements instanceof Element) {\n elements = [elements];\n } else {\n elements = Array.prototype.slice.call(elements);\n }\n }\n for (var i = 0, n = elements.length, element; i < n; i++) {\n element = elements[i];\n if (element instanceof HTMLElement) {\n upgradeElementInternal(element);\n if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config\n */\n function registerInternal(config) {\n // In order to support both Closure-compiled and uncompiled code accessing\n // this method, we need to allow for both the dot and array syntax for\n // property access. You'll therefore see the `foo.bar || foo['bar']`\n // pattern repeated across this method.\n var widgetMissing = (typeof config.widget === 'undefined' &&\n typeof config['widget'] === 'undefined');\n var widget = true;\n\n if (!widgetMissing) {\n widget = config.widget || config['widget'];\n }\n\n var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n classConstructor: config.constructor || config['constructor'],\n className: config.classAsString || config['classAsString'],\n cssClass: config.cssClass || config['cssClass'],\n widget: widget,\n callbacks: []\n });\n\n registeredComponents_.forEach(function(item) {\n if (item.cssClass === newConfig.cssClass) {\n throw new Error('The provided cssClass has already been registered: ' + item.cssClass);\n }\n if (item.className === newConfig.className) {\n throw new Error('The provided className has already been registered');\n }\n });\n\n if (config.constructor.prototype\n .hasOwnProperty(componentConfigProperty_)) {\n throw new Error(\n 'MDL component classes must not have ' + componentConfigProperty_ +\n ' defined as a property.');\n }\n\n var found = findRegisteredClass_(config.classAsString, newConfig);\n\n if (!found) {\n registeredComponents_.push(newConfig);\n }\n }\n\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n function registerUpgradedCallbackInternal(jsClass, callback) {\n var regClass = findRegisteredClass_(jsClass);\n if (regClass) {\n regClass.callbacks.push(callback);\n }\n }\n\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n function upgradeAllRegisteredInternal() {\n for (var n = 0; n < registeredComponents_.length; n++) {\n upgradeDomInternal(registeredComponents_[n].className);\n }\n }\n\n /**\n * Check the component for the downgrade method.\n * Execute if found.\n * Remove component from createdComponents list.\n *\n * @param {?componentHandler.Component} component\n */\n function deconstructComponentInternal(component) {\n if (component) {\n var componentIndex = createdComponents_.indexOf(component);\n createdComponents_.splice(componentIndex, 1);\n\n var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev = createEvent_('mdl-componentdowngraded', true, false);\n component.element_.dispatchEvent(ev);\n }\n }\n\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n function downgradeNodesInternal(nodes) {\n /**\n * Auxiliary function to downgrade a single node.\n * @param {!Node} node the node to be downgraded\n */\n var downgradeNode = function(node) {\n createdComponents_.filter(function(item) {\n return item.element_ === node;\n }).forEach(deconstructComponentInternal);\n };\n if (nodes instanceof Array || nodes instanceof NodeList) {\n for (var n = 0; n < nodes.length; n++) {\n downgradeNode(nodes[n]);\n }\n } else if (nodes instanceof Node) {\n downgradeNode(nodes);\n } else {\n throw new Error('Invalid argument provided to downgrade MDL nodes.');\n }\n }\n\n // Now return the functions that should be made public with their publicly\n // facing names...\n return {\n upgradeDom: upgradeDomInternal,\n upgradeElement: upgradeElementInternal,\n upgradeElements: upgradeElementsInternal,\n upgradeAllRegistered: upgradeAllRegisteredInternal,\n registerUpgradedCallback: registerUpgradedCallbackInternal,\n register: registerInternal,\n downgradeElements: downgradeNodesInternal\n };\n})();\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: Function,\n * classAsString: string,\n * cssClass: string,\n * widget: (string|boolean|undefined)\n * }}\n */\ncomponentHandler.ComponentConfigPublic; // jshint ignore:line\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: !Function,\n * className: string,\n * cssClass: string,\n * widget: (string|boolean),\n * callbacks: !Array\n * }}\n */\ncomponentHandler.ComponentConfig; // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * element_: !HTMLElement,\n * className: string,\n * classAsString: string,\n * cssClass: string,\n * widget: string\n * }}\n */\ncomponentHandler.Component; // jshint ignore:line\n\n// Export all symbols, for the benefit of Closure compiler.\n// No effect on uncompiled code.\ncomponentHandler['upgradeDom'] = componentHandler.upgradeDom;\ncomponentHandler['upgradeElement'] = componentHandler.upgradeElement;\ncomponentHandler['upgradeElements'] = componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered'] =\n componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback'] =\n componentHandler.registerUpgradedCallback;\ncomponentHandler['register'] = componentHandler.register;\ncomponentHandler['downgradeElements'] = componentHandler.downgradeElements;\nwindow.componentHandler = componentHandler;\nwindow['componentHandler'] = componentHandler;\n\nwindow.addEventListener('load', function() {\n 'use strict';\n\n /**\n * Performs a \"Cutting the mustard\" test. If the browser supports the features\n * tested, adds a mdl-js class to the element. It then upgrades all MDL\n * components requiring JavaScript.\n */\n if ('classList' in document.createElement('div') &&\n 'querySelector' in document &&\n 'addEventListener' in window && Array.prototype.forEach) {\n document.documentElement.classList.add('mdl-js');\n componentHandler.upgradeAllRegistered();\n } else {\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.upgradeElement = function() {};\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.register = function() {};\n }\n});\n","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n /**\n * Date.now polyfill.\n * @return {number} the current Date\n */\n Date.now = function () {\n return new Date().getTime();\n };\n Date['now'] = Date.now;\n}\nvar vendors = [\n 'webkit',\n 'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n /**\n * requestAnimationFrame polyfill.\n * @param {!Function} callback the callback function.\n */\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialButton'] = MaterialButton;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialButton.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialButton.prototype.blurHandler_ = function (event) {\n if (event) {\n this.element_.blur();\n }\n};\n// Public methods.\n/**\n * Disable button.\n *\n * @public\n */\nMaterialButton.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n/**\n * Enable button.\n *\n * @public\n */\nMaterialButton.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function () {\n if (this.element_) {\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleElement_ = document.createElement('span');\n this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(this.rippleElement_);\n this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n this.element_.appendChild(rippleContainer);\n }\n this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialCheckbox'] = MaterialCheckbox;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialCheckbox.prototype['checkToggleState'] = MaterialCheckbox.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialCheckbox.prototype['checkDisabled'] = MaterialCheckbox.prototype.checkDisabled;\n/**\n * Disable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n/**\n * Enable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n/**\n * Check checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n/**\n * Uncheck checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n boxOutline.appendChild(tickOutline);\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for icon toggle MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialIconToggle'] = MaterialIconToggle;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialIconToggle.prototype['checkToggleState'] = MaterialIconToggle.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialIconToggle.prototype['checkDisabled'] = MaterialIconToggle.prototype.checkDisabled;\n/**\n * Disable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable'] = MaterialIconToggle.prototype.disable;\n/**\n * Enable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n/**\n * Check icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n/**\n * Uncheck icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck'] = MaterialIconToggle.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left',\n // This is the default.\n BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n TOP_LEFT: 'mdl-menu--top-left',\n TOP_RIGHT: 'mdl-menu--top-right',\n UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n * Initialize element.\n */\nMaterialMenu.prototype.init = function () {\n if (this.element_) {\n // Create container for the menu.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n this.container_ = container;\n // Create outline for the menu (shadow and background).\n var outline = document.createElement('div');\n outline.classList.add(this.CssClasses_.OUTLINE);\n this.outline_ = outline;\n container.insertBefore(outline, this.element_);\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n var forEl = null;\n if (forElId) {\n forEl = document.getElementById(forElId);\n if (forEl) {\n this.forElement_ = forEl;\n forEl.addEventListener('click', this.handleForClick_.bind(this));\n forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n }\n }\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);\n this.boundItemClick_ = this.handleItemClick_.bind(this);\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.boundItemClick_);\n // Add a tab index to each menu item.\n items[i].tabIndex = '-1';\n // Add a keyboard listener to each menu item.\n items[i].addEventListener('keydown', this.boundItemKeydown_);\n }\n // Add ripple classes to each item, if the user has enabled ripples.\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\n }\n // Copy alignment classes to the container, so the outline can use them.\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n }\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Handles a click on the \"for\" element, by positioning the menu and then\n * toggling it.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Position below the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Position above the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Position above the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n this.toggle(evt);\n};\n/**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n items[items.length - 1].focus();\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n items[0].focus();\n }\n }\n }\n};\n/**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n } else {\n items[items.length - 1].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n if (items.length > currentIndex + 1) {\n items[currentIndex + 1].focus();\n } else {\n items[0].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n evt.preventDefault();\n // Send mousedown and mouseup to trigger ripple.\n var e = new MouseEvent('mousedown');\n evt.target.dispatchEvent(e);\n e = new MouseEvent('mouseup');\n evt.target.dispatchEvent(e);\n // Send click.\n evt.target.click();\n } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n evt.preventDefault();\n this.hide();\n }\n }\n }\n};\n/**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n if (evt.target.hasAttribute('disabled')) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function (evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n/**\n * Calculates the initial clip (for opening the menu) or final clip (for closing\n * it), and applies it. This allows us to animate from or to the correct point,\n * that is, the point it's aligned to in the \"for\" element.\n *\n * @param {number} height Height of the clip rectangle\n * @param {number} width Width of the clip rectangle\n * @private\n */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = '';\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Clip to the top right corner of the menu.\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Clip to the bottom left corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Clip to the bottom right corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.element_.style.clip = '';\n }\n};\n/**\n * Cleanup function to remove animation listeners.\n *\n * @param {Event} evt\n * @private\n */\nMaterialMenu.prototype.removeAnimationEndListener_ = function (evt) {\n evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n};\n/**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n};\n/**\n * Displays the menu.\n *\n * @public\n */\nMaterialMenu.prototype.show = function (evt) {\n if (this.element_ && this.container_ && this.outline_) {\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Apply the inner element's size to the container and outline.\n this.container_.style.width = width + 'px';\n this.container_.style.height = height + 'px';\n this.outline_.style.width = width + 'px';\n this.outline_.style.height = height + 'px';\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n // Calculate transition delays for individual menu items, so that they fade\n // in one at a time.\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n var itemDelay = null;\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n } else {\n itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n // Wait for the next frame, turn on animation, and apply the final clip.\n // Also make it visible. This triggers the transitions.\n window.requestAnimationFrame(function () {\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n }.bind(this));\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n // Add a click listener to the document, to close the menu.\n var callback = function (e) {\n // Check to see if the document is processing the same event that\n // displayed the menu in the first place. If so, do nothing.\n // Also check to see if the menu is in the process of closing itself, and\n // do nothing in that case.\n // Also check if the clicked element is a menu item\n // if so, do nothing.\n if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\nMaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n/**\n * Hides the menu.\n *\n * @public\n */\nMaterialMenu.prototype.hide = function () {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n // Remove all transition delays; menu items fade out concurrently.\n for (var i = 0; i < items.length; i++) {\n items[i].style.removeProperty('transition-delay');\n }\n // Measure the inner element.\n var rect = this.element_.getBoundingClientRect();\n var height = rect.height;\n var width = rect.width;\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.applyClip_(height, width);\n this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n};\nMaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n/**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\nMaterialMenu.prototype.toggle = function (evt) {\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\nMaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialProgress'] = MaterialProgress;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialProgress.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n * Set the current progress of the progressbar.\n *\n * @param {number} p Percentage of the progress (0-100)\n * @public\n */\nMaterialProgress.prototype.setProgress = function (p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n this.progressbar_.style.width = p + '%';\n};\nMaterialProgress.prototype['setProgress'] = MaterialProgress.prototype.setProgress;\n/**\n * Set the current progress of the buffer.\n *\n * @param {number} p Percentage of the buffer (0-100)\n * @public\n */\nMaterialProgress.prototype.setBuffer = function (p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = 100 - p + '%';\n};\nMaterialProgress.prototype['setBuffer'] = MaterialProgress.prototype.setBuffer;\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function () {\n if (this.element_) {\n var el = document.createElement('div');\n el.className = 'progressbar bar bar1';\n this.element_.appendChild(el);\n this.progressbar_ = el;\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function (event) {\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n if (typeof radios[i]['MaterialRadio'] !== 'undefined') {\n radios[i]['MaterialRadio'].updateClasses_();\n }\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n this.blur_();\n};\n/**\n * Update classes.\n *\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialRadio.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.btnElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkDisabled = function () {\n if (this.btnElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialRadio.prototype['checkDisabled'] = MaterialRadio.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkToggleState = function () {\n if (this.btnElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialRadio.prototype['checkToggleState'] = MaterialRadio.prototype.checkToggleState;\n/**\n * Disable radio.\n *\n * @public\n */\nMaterialRadio.prototype.disable = function () {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n/**\n * Enable radio.\n *\n * @public\n */\nMaterialRadio.prototype.enable = function () {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n/**\n * Check radio.\n *\n * @public\n */\nMaterialRadio.prototype.check = function () {\n this.btnElement_.checked = true;\n this.onChange_(null);\n};\nMaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n/**\n * Uncheck radio.\n *\n * @public\n */\nMaterialRadio.prototype.uncheck = function () {\n this.btnElement_.checked = false;\n this.onChange_(null);\n};\nMaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function () {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n this.boundChangeHandler_ = this.onChange_.bind(this);\n this.boundFocusHandler_ = this.onChange_.bind(this);\n this.boundBlurHandler_ = this.onBlur_.bind(this);\n this.boundMouseUpHandler_ = this.onMouseup_.bind(this);\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n var rippleContainer;\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\n this.btnElement_.addEventListener('change', this.boundChangeHandler_);\n this.btnElement_.addEventListener('focus', this.boundFocusHandler_);\n this.btnElement_.addEventListener('blur', this.boundBlurHandler_);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSlider = function MaterialSlider(element) {\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSlider'] = MaterialSlider;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSlider.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n event.target.blur();\n};\n/**\n * Handle mousedown on container element.\n * This handler is purpose is to not require the use to click\n * exactly on the 2px slider element, as FireFox seems to be very\n * strict about this.\n *\n * @param {Event} event The event that fired.\n * @private\n * @suppress {missingProperties}\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n // If this click is not on the parent element (but rather some child)\n // ignore. It may still bubble up.\n if (event.target !== this.element_.parentElement) {\n return;\n }\n // Discard the original event and create a new event that\n // is on the slider element.\n event.preventDefault();\n var newEvent = new MouseEvent('mousedown', {\n target: event.target,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: this.element_.getBoundingClientRect().y\n });\n this.element_.dispatchEvent(newEvent);\n};\n/**\n * Handle updating of values.\n *\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function () {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n if (fraction === 0) {\n this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n }\n if (!this.isIE_) {\n this.backgroundLower_.style.flex = fraction;\n this.backgroundLower_.style.webkitFlex = fraction;\n this.backgroundUpper_.style.flex = 1 - fraction;\n this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n }\n};\n// Public methods.\n/**\n * Disable slider.\n *\n * @public\n */\nMaterialSlider.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n/**\n * Enable slider.\n *\n * @public\n */\nMaterialSlider.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n/**\n * Update slider value.\n *\n * @param {number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function (value) {\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\nMaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function () {\n if (this.element_) {\n if (this.isIE_) {\n // Since we need to specify a very large height in IE due to\n // implementation limitations, we add a parent here that trims it down to\n // a reasonable size.\n var containerIE = document.createElement('div');\n containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n this.element_.parentElement.insertBefore(containerIE, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n containerIE.appendChild(this.element_);\n } else {\n // For non-IE browsers, we need a div structure that sits behind the\n // slider and allows us to style the left and right sides of it with\n // different colors.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var backgroundFlex = document.createElement('div');\n backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n container.appendChild(backgroundFlex);\n this.backgroundLower_ = document.createElement('div');\n this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n backgroundFlex.appendChild(this.backgroundLower_);\n this.backgroundUpper_ = document.createElement('div');\n this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n backgroundFlex.appendChild(this.backgroundUpper_);\n }\n this.boundInputHandler = this.onInput_.bind(this);\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n this.element_.addEventListener('input', this.boundInputHandler);\n this.element_.addEventListener('change', this.boundChangeHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n this.updateValueStyles_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Snackbar MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSnackbar = function MaterialSnackbar(element) {\n this.element_ = element;\n this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);\n this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);\n if (!this.textElement_) {\n throw new Error('There must be a message element for a snackbar.');\n }\n if (!this.actionElement_) {\n throw new Error('There must be an action element for a snackbar.');\n }\n this.active = false;\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.queuedNotifications_ = [];\n this.setActionHidden_(true);\n};\nwindow['MaterialSnackbar'] = MaterialSnackbar;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSnackbar.prototype.Constant_ = {\n // The duration of the snackbar show/hide animation, in ms.\n ANIMATION_LENGTH: 250\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSnackbar.prototype.cssClasses_ = {\n SNACKBAR: 'mdl-snackbar',\n MESSAGE: 'mdl-snackbar__text',\n ACTION: 'mdl-snackbar__action',\n ACTIVE: 'mdl-snackbar--active'\n};\n/**\n * Display the snackbar.\n *\n * @private\n */\nMaterialSnackbar.prototype.displaySnackbar_ = function () {\n this.element_.setAttribute('aria-hidden', 'true');\n if (this.actionHandler_) {\n this.actionElement_.textContent = this.actionText_;\n this.actionElement_.addEventListener('click', this.actionHandler_);\n this.setActionHidden_(false);\n }\n this.textElement_.textContent = this.message_;\n this.element_.classList.add(this.cssClasses_.ACTIVE);\n this.element_.setAttribute('aria-hidden', 'false');\n setTimeout(this.cleanup_.bind(this), this.timeout_);\n};\n/**\n * Show the snackbar.\n *\n * @param {Object} data The data for the notification.\n * @public\n */\nMaterialSnackbar.prototype.showSnackbar = function (data) {\n if (data === undefined) {\n throw new Error('Please provide a data object with at least a message to display.');\n }\n if (data['message'] === undefined) {\n throw new Error('Please provide a message to be displayed.');\n }\n if (data['actionHandler'] && !data['actionText']) {\n throw new Error('Please provide action text with the handler.');\n }\n if (this.active) {\n this.queuedNotifications_.push(data);\n } else {\n this.active = true;\n this.message_ = data['message'];\n if (data['timeout']) {\n this.timeout_ = data['timeout'];\n } else {\n this.timeout_ = 2750;\n }\n if (data['actionHandler']) {\n this.actionHandler_ = data['actionHandler'];\n }\n if (data['actionText']) {\n this.actionText_ = data['actionText'];\n }\n this.displaySnackbar_();\n }\n};\nMaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;\n/**\n * Check if the queue has items within it.\n * If it does, display the next entry.\n *\n * @private\n */\nMaterialSnackbar.prototype.checkQueue_ = function () {\n if (this.queuedNotifications_.length > 0) {\n this.showSnackbar(this.queuedNotifications_.shift());\n }\n};\n/**\n * Cleanup the snackbar event listeners and accessiblity attributes.\n *\n * @private\n */\nMaterialSnackbar.prototype.cleanup_ = function () {\n this.element_.classList.remove(this.cssClasses_.ACTIVE);\n setTimeout(function () {\n this.element_.setAttribute('aria-hidden', 'true');\n this.textElement_.textContent = '';\n if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {\n this.setActionHidden_(true);\n this.actionElement_.textContent = '';\n this.actionElement_.removeEventListener('click', this.actionHandler_);\n }\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.active = false;\n this.checkQueue_();\n }.bind(this), this.Constant_.ANIMATION_LENGTH);\n};\n/**\n * Set the action handler hidden state.\n *\n * @param {boolean} value\n * @private\n */\nMaterialSnackbar.prototype.setActionHidden_ = function (value) {\n if (value) {\n this.actionElement_.setAttribute('aria-hidden', 'true');\n } else {\n this.actionElement_.removeAttribute('aria-hidden');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSnackbar,\n classAsString: 'MaterialSnackbar',\n cssClass: 'mdl-js-snackbar',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nvar MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSpinner'] = MaterialSpinner;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n * Auxiliary method to create a spinner layer.\n *\n * @param {number} index Index of the layer to be created.\n * @public\n */\nMaterialSpinner.prototype.createLayer = function (index) {\n var layer = document.createElement('div');\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n var leftClipper = document.createElement('div');\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n var rightClipper = document.createElement('div');\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n var circleOwners = [\n leftClipper,\n gapPatch,\n rightClipper\n ];\n for (var i = 0; i < circleOwners.length; i++) {\n var circle = document.createElement('div');\n circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n circleOwners[i].appendChild(circle);\n }\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer'] = MaterialSpinner.prototype.createLayer;\n/**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\nMaterialSpinner.prototype.stop = function () {\n this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n/**\n * Starts the spinner animation.\n * Public method for users who need to manually start the spinner for any reason\n * (instead of just adding the 'is-active' class to their markup).\n *\n * @public\n */\nMaterialSpinner.prototype.start = function () {\n this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function () {\n if (this.element_) {\n for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n this.createLayer(i);\n }\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSwitch'] = MaterialSwitch;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialSwitch.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialSwitch.prototype['checkDisabled'] = MaterialSwitch.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialSwitch.prototype['checkToggleState'] = MaterialSwitch.prototype.checkToggleState;\n/**\n * Disable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n/**\n * Enable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n/**\n * Activate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.on = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n/**\n * Deactivate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.off = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n thumb.appendChild(focusHelper);\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.inputElement_.addEventListener('change', this.boundChangeHandler);\n this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTextfield'] = MaterialTextfield;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded',\n HAS_PLACEHOLDER: 'has-placeholder'\n};\n/**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n var currentRowCount = event.target.value.split('\\n').length;\n if (event.keyCode === 13) {\n if (currentRowCount >= this.maxRows) {\n event.preventDefault();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle reset event from out side.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onReset_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n this.checkFocus();\n};\n// Public methods.\n/**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function () {\n if (this.input_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.checkDisabled;\n/**\n * Check the focus state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkFocus = function () {\n if (Boolean(this.element_.querySelector(':focus'))) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n }\n};\nMaterialTextfield.prototype['checkFocus'] = MaterialTextfield.prototype.checkFocus;\n/**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function () {\n if (this.input_.validity) {\n if (this.input_.validity.valid) {\n this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n } else {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n }\n};\nMaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;\n/**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDirty = function () {\n if (this.input_.value && this.input_.value.length > 0) {\n this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n }\n};\nMaterialTextfield.prototype['checkDirty'] = MaterialTextfield.prototype.checkDirty;\n/**\n * Disable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.disable = function () {\n this.input_.disabled = true;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n/**\n * Enable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.enable = function () {\n this.input_.disabled = false;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n/**\n * Update text field value.\n *\n * @param {string} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function (value) {\n this.input_.value = value || '';\n this.updateClasses_();\n};\nMaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function () {\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.input_) {\n if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n if (this.input_.hasAttribute('placeholder')) {\n this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n }\n this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.boundResetHandler = this.onReset_.bind(this);\n this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\n this.input_.addEventListener('reset', this.boundResetHandler);\n if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n // TODO: This should handle pasting multi line text.\n // Currently doesn't.\n this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n }\n var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n if (invalid) {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n if (this.input_.hasAttribute('autofocus')) {\n this.element_.focus();\n this.checkFocus();\n }\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTooltip'] = MaterialTooltip;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = {\n IS_ACTIVE: 'is-active',\n BOTTOM: 'mdl-tooltip--bottom',\n LEFT: 'mdl-tooltip--left',\n RIGHT: 'mdl-tooltip--right',\n TOP: 'mdl-tooltip--top'\n};\n/**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n var props = event.target.getBoundingClientRect();\n var left = props.left + props.width / 2;\n var top = props.top + props.height / 2;\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n var marginTop = -1 * (this.element_.offsetHeight / 2);\n if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n left = props.width / 2;\n if (top + marginTop < 0) {\n this.element_.style.top = '0';\n this.element_.style.marginTop = '0';\n } else {\n this.element_.style.top = top + 'px';\n this.element_.style.marginTop = marginTop + 'px';\n }\n } else {\n if (left + marginLeft < 0) {\n this.element_.style.left = '0';\n this.element_.style.marginLeft = '0';\n } else {\n this.element_.style.left = left + 'px';\n this.element_.style.marginLeft = marginLeft + 'px';\n }\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP)) {\n this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n this.element_.style.left = props.left + props.width + 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {\n this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';\n } else {\n this.element_.style.top = props.top + props.height + 10 + 'px';\n }\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Hide tooltip on mouseleave or scroll\n *\n * @private\n */\nMaterialTooltip.prototype.hideTooltip_ = function () {\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function () {\n if (this.element_) {\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n if (this.forElement_) {\n // It's left here because it prevents accidental text selection on Android\n if (!this.forElement_.hasAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveAndScrollHandler = this.hideTooltip_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveAndScrollHandler, false);\n window.addEventListener('scroll', this.boundMouseLeaveAndScrollHandler, true);\n window.addEventListener('touchstart', this.boundMouseLeaveAndScrollHandler);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Data Table Card MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialDataTable'] = MaterialDataTable;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n SELECT_ELEMENT: 'mdl-data-table__select',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Generates and returns a function that toggles the selection state of a\n * single row (or multiple rows).\n *\n * @param {Element} checkbox Checkbox that toggles the selection state.\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {\n if (row) {\n return function () {\n if (checkbox.checked) {\n row.classList.add(this.CssClasses_.IS_SELECTED);\n } else {\n row.classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }.bind(this);\n }\n if (opt_rows) {\n return function () {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].check();\n opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].uncheck();\n opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n/**\n * Creates a checkbox for a single or or multiple rows and hooks up the\n * event handling.\n *\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {\n var label = document.createElement('label');\n var labelClasses = [\n 'mdl-checkbox',\n 'mdl-js-checkbox',\n 'mdl-js-ripple-effect',\n this.CssClasses_.SELECT_ELEMENT\n ];\n label.className = labelClasses.join(' ');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (opt_rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function () {\n if (this.element_) {\n var firstHeader = this.element_.querySelector('th');\n var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));\n var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));\n var rows = bodyRows.concat(footRows);\n if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n var th = document.createElement('th');\n var headerCheckbox = this.createCheckbox_(null, rows);\n th.appendChild(headerCheckbox);\n firstHeader.parentElement.insertBefore(th, firstHeader);\n for (var i = 0; i < rows.length; i++) {\n var firstCell = rows[i].querySelector('td');\n if (firstCell) {\n var td = document.createElement('td');\n if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {\n var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n }\n rows[i].insertBefore(td, firstCell);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","module.exports = {};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","require('./_set-species')('Array');\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatten');\n","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export');\nvar $at = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","'use strict';\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = require('./_export');\nvar defined = require('./_defined');\nvar toLength = require('./_to-length');\nvar isRegExp = require('./_is-regexp');\nvar getFlags = require('./_flags');\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\n// Forced replacement prototype accessors methods\nmodule.exports = require('./_library') || !require('./_fails')(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete require('./_global')[K];\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') });\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\nrequire('./_set-collection-of')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\nrequire('./_set-collection-of')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\nrequire('./_set-collection-of')('WeakSet');\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\nrequire('./_set-collection-from')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\nrequire('./_set-collection-from')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\nrequire('./_set-collection-from')('WeakSet');\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', { global: require('./_global') });\n","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export');\nvar cof = require('./_cof');\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar scale = require('./_math-scale');\nvar fround = require('./_math-fround');\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { scale: require('./_math-scale') });\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n","// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = require('./_export');\nvar microtask = require('./_microtask')();\nvar process = require('./_global').process;\nvar isNode = require('./_cof')(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n","'use strict';\n// https://github.com/zenparsing/es-observable\nvar $export = require('./_export');\nvar global = require('./_global');\nvar core = require('./_core');\nvar microtask = require('./_microtask')();\nvar OBSERVABLE = require('./_wks')('observable');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar anInstance = require('./_an-instance');\nvar redefineAll = require('./_redefine-all');\nvar hide = require('./_hide');\nvar forOf = require('./_for-of');\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\nrequire('./_set-species')('Observable');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.exec');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.array.flat-map');\nrequire('./modules/es7.array.flatten');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.map.of');\nrequire('./modules/es7.set.of');\nrequire('./modules/es7.weak-map.of');\nrequire('./modules/es7.weak-set.of');\nrequire('./modules/es7.map.from');\nrequire('./modules/es7.set.from');\nrequire('./modules/es7.weak-map.from');\nrequire('./modules/es7.weak-set.from');\nrequire('./modules/es7.global');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.clamp');\nrequire('./modules/es7.math.deg-per-rad');\nrequire('./modules/es7.math.degrees');\nrequire('./modules/es7.math.fscale');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.rad-per-deg');\nrequire('./modules/es7.math.radians');\nrequire('./modules/es7.math.scale');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.math.signbit');\nrequire('./modules/es7.promise.finally');\nrequire('./modules/es7.promise.try');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export');\nvar $re = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;\n","\"use strict\";\n\nrequire(\"core-js/shim\");\n\nrequire(\"regenerator-runtime/runtime\");\n\nrequire(\"core-js/fn/regexp/escape\");\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});","export default class ScrollSpy {\n constructor(args) {\n\n this.doc = document;\n this.nav = this.doc.querySelectorAll(args.navSelector);\n\n if(!this.nav.length === 0) { return }\n\n this.win = window;\n this.winHeight = this.win.innerHeight;\n\n this.scrollElement = this.doc.querySelector(args.scrollSelector);\n this.className = args.className;\n this.offsetTop = args.offsetTop || 0;\n\n this.contents = [];\n this.contents = this.getContents(args.contentSelector);\n\n this.attachEvent();\n }\n\n attachEvent() {\n let scrollTimer;\n this.scrollElement.addEventListener('scroll', () => {\n if (scrollTimer) {\n clearTimeout(scrollTimer);\n }\n\n scrollTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n let resizeTimer;\n this.scrollElement.addEventListener('resize', () => {\n if (resizeTimer) {\n clearTimeout(resizeTimer);\n }\n\n resizeTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n this.scrollElement.addEventListener(\"click\", (e) => {\n const target = e.target;\n if (target.tagName !== \"A\") return;\n window.onclickToc = true;\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href === target.href) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n });\n }\n\n getContents(contentSelector) {\n const targets = [];\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const href = this.nav[i].href;\n targets.push(this.doc.getElementById(href.split('#')[1]));\n }\n return targets;\n }\n\n spy() {\n let elements = this.getViewState();\n this.toggleNavClass(elements);\n }\n\n getViewState() {\n const elementListInView = [];\n for (let i = 0, max = this.contents.length; i < max; i++) {\n const current = this.contents[i];\n if (current && this.isView(current)) {\n elementListInView.push(current);\n }\n }\n\n return elementListInView;\n }\n\n isView(element) {\n const scrollTop = this.scrollElement.scrollTop;\n const subHeaderRect = document.querySelector(\".mdl-layout__header-row\").getBoundingClientRect();\n const headerHeight = subHeaderRect.top + subHeaderRect.height;\n const scrollBottom = scrollTop + window.innerHeight - headerHeight;\n const rect = element.getBoundingClientRect();\n const elementTop = rect.top + scrollTop;\n const elementBottom = elementTop + element.offsetHeight;\n\n return elementTop < scrollBottom - 30 && elementBottom > scrollTop + headerHeight + 30;\n }\n\n toggleNavClass(elements) {\n if (window.onclickToc) {\n window.onclickToc = false;\n return;\n }\n let maxDepth = 0;\n let maxDepthElement = $();\n\n for (let i = 0, max = elements.length; i < max; i++) {\n const el = elements[i];\n const tempDepth = this.getTagDepth(el);\n if (maxDepth < tempDepth) {\n maxDepth = tempDepth;\n maxDepthElement = el;\n }\n }\n\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href.split('#')[1] === maxDepthElement.id) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n }\n\n getTagDepth(element) {\n return parseInt($(element).find('h1,h2,h3,h4,h5,h6').get(0).tagName.split('H')[1]);\n }\n}\n","import \"../scss/sphinx_materialdesign_theme.scss\";\r\nimport \"material-design-lite\";\r\nimport \"babel-polyfill\";\r\nimport ScrollSpy from \"./scrollspy\";\r\n\r\n$(function() {\r\n\r\n function reconstructionDrawerGlobalToc() {\r\n const $globaltoc = $('.mdl-layout__drawer nav');\r\n const $lists = $globaltoc.find('li');\r\n $.each($lists, function(index, li) {\r\n const $li = $(li);\r\n const $linkWrapper = $('');\r\n const $link = $li.children('a');\r\n $li.append($linkWrapper.append($link));\r\n\r\n const isCurrent = $li.hasClass('current') && !$link.hasClass('current');\r\n const $ul = $li.children('ul');\r\n if ($ul.length) {\r\n const ulId = `globalnav-${index}`;\r\n $ul.attr('id', ulId);\r\n $ul.addClass('collapse');\r\n const $toggleWrapper = $('');\r\n if (isCurrent) {\r\n $ul.addClass('show');\r\n $toggleWrapper.addClass('show');\r\n } else {\r\n $ul.hide();\r\n }\r\n\r\n $li.append(\r\n $linkWrapper.append(\r\n $toggleWrapper.append(\r\n $(`keyboard_arrow_down`)\r\n )\r\n )\r\n ).append($ul);\r\n }\r\n });\r\n }\r\n\r\n function collapse() {\r\n $('.mdl-layout__drawer nav .nav-toggle a').click(function() {\r\n const $toggle = $(this);\r\n const id = $toggle.attr('data-toggle');\r\n $(`ul${id}`).toggleClass('show').animate({height: \"toggle\", opacity: \"toggle\"});\r\n $toggle.parent().toggleClass('show');\r\n });\r\n }\r\n\r\n function styleMdlCodeBlock() {\r\n $('pre').hover(function() {\r\n $(this).attr('click-to-copy', 'click to copy...');\r\n });\r\n $('pre').click(function(){\r\n var result = copyClipboard(this);\r\n if (result) {\r\n $(this).attr('click-to-copy', 'copied!');\r\n }\r\n });\r\n }\r\n\r\n function copyClipboard(selector) {\r\n var body = document.body;\r\n if(!body) return false;\r\n\r\n var $target = $(selector);\r\n if ($target.length === 0) { return false; }\r\n\r\n var text = $target.text();\r\n var textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n var result = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n return result;\r\n }\r\n\r\n function quickSearchClickEvent() {\r\n const $breadcrumb = $('.breadcrumb');\r\n\r\n $('#waterfall-exp').focus(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.hide();\r\n }\r\n }).blur(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.show();\r\n }\r\n });\r\n }\r\n\r\n // styleMdlCodeBlock();\r\n\r\n reconstructionDrawerGlobalToc();\r\n collapse();\r\n quickSearchClickEvent();\r\n\r\n\r\n const spy = new ScrollSpy({\r\n contentSelector: '.page-content .section',\r\n navSelector: '.localtoc a',\r\n scrollSelector: 'main' ,\r\n className: 'current',\r\n offsetTop: 64});\r\n\r\n $('.mdl-layout__content').focus();\r\n\r\n $('.mx-card').each(function(){\r\n $(this).addClass('mdl-card mdl-shadow--2dp');\r\n });\r\n $('.mx-card .mx-card-title').each(function(){\r\n $(this).addClass('mdl-card__title');\r\n });\r\n $('.mx-card .mx-card-text').each(function(){\r\n $(this).addClass('mdl-card__supporting-text');\r\n });\r\n $('.mx-card-link').each(function(){\r\n $(this).hide();\r\n });\r\n $('.mdl-card').each(function(){\r\n $(this).click(function() {\r\n var url = $(this).find('.mx-card-link').text();\r\n if (url) {\r\n window.location = url;\r\n }\r\n return true;\r\n });\r\n });\r\n\r\n $('a.download').each(function() {\r\n // button\r\n var button = document.createElement('button');\r\n button.className = 'download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect';\r\n\r\n // icon\r\n var icon = document.createElement('i');\r\n icon.className = 'material-icons';\r\n var text = document.createTextNode('file_download');\r\n icon.appendChild(text);\r\n button.appendChild(icon);\r\n\r\n // link\r\n var link = $(this).attr('href');\r\n button.onclick = function() {\r\n window.location = link;\r\n };\r\n var fileName = link.split(\"/\").slice(-1).pop();\r\n if (fileName) {\r\n button.id = fileName.replace('.', '-');\r\n } else {\r\n button.id = 'download-button-' + $(this).index();\r\n }\r\n\r\n // hint\r\n var hint = document.createElement('div');\r\n hint.className = 'mdl-tooltip';\r\n hint.setAttribute('data-mdl-for', button.id);\r\n var hintText = $(this).find('span.pre').map(function() {\r\n return $(this).text();\r\n }).get().join(' ');\r\n hint.innerHTML = hintText;\r\n\r\n componentHandler.upgradeElement(button);\r\n $(this).remove();\r\n var header = $('.section h1').first();\r\n header.append(button);\r\n header.append(hint);\r\n });\r\n\r\n $('.mdl-layout').css('visibility', 'visible');\r\n\r\n});\r\n"]} \ No newline at end of file +{"version":3,"sources":["feedback.js","ripple.js","tabs.js","layout.js","mdlComponentHandler.js","rAF.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","snackbar.js","spinner.js","switch.js","textfield.js","tooltip.js","data-table.js","../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_function-to-string.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/es6.object.create.js","../../node_modules/core-js/modules/es6.object.define-property.js","../../node_modules/core-js/modules/es6.object.define-properties.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/es6.object.set-prototype-of.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/es6.object.to-string.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.function.bind.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.function.has-instance.js","../../node_modules/core-js/modules/_string-ws.js","../../node_modules/core-js/modules/_string-trim.js","../../node_modules/core-js/modules/_parse-int.js","../../node_modules/core-js/modules/es6.parse-int.js","../../node_modules/core-js/modules/_parse-float.js","../../node_modules/core-js/modules/es6.parse-float.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/es6.number.constructor.js","../../node_modules/core-js/modules/_a-number-value.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.number.to-fixed.js","../../node_modules/core-js/modules/es6.number.to-precision.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.parse-float.js","../../node_modules/core-js/modules/es6.number.parse-int.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.trim.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.string.iterator.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/_string-html.js","../../node_modules/core-js/modules/es6.string.anchor.js","../../node_modules/core-js/modules/es6.string.big.js","../../node_modules/core-js/modules/es6.string.blink.js","../../node_modules/core-js/modules/es6.string.bold.js","../../node_modules/core-js/modules/es6.string.fixed.js","../../node_modules/core-js/modules/es6.string.fontcolor.js","../../node_modules/core-js/modules/es6.string.fontsize.js","../../node_modules/core-js/modules/es6.string.italics.js","../../node_modules/core-js/modules/es6.string.link.js","../../node_modules/core-js/modules/es6.string.small.js","../../node_modules/core-js/modules/es6.string.strike.js","../../node_modules/core-js/modules/es6.string.sub.js","../../node_modules/core-js/modules/es6.string.sup.js","../../node_modules/core-js/modules/es6.date.now.js","../../node_modules/core-js/modules/es6.date.to-json.js","../../node_modules/core-js/modules/_date-to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-iso-string.js","../../node_modules/core-js/modules/es6.date.to-string.js","../../node_modules/core-js/modules/_date-to-primitive.js","../../node_modules/core-js/modules/es6.date.to-primitive.js","../../node_modules/core-js/modules/es6.array.is-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/_strict-method.js","../../node_modules/core-js/modules/es6.array.join.js","../../node_modules/core-js/modules/es6.array.slice.js","../../node_modules/core-js/modules/es6.array.sort.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/es6.array.for-each.js","../../node_modules/core-js/modules/es6.array.map.js","../../node_modules/core-js/modules/es6.array.filter.js","../../node_modules/core-js/modules/es6.array.some.js","../../node_modules/core-js/modules/es6.array.every.js","../../node_modules/core-js/modules/_array-reduce.js","../../node_modules/core-js/modules/es6.array.reduce.js","../../node_modules/core-js/modules/es6.array.reduce-right.js","../../node_modules/core-js/modules/es6.array.index-of.js","../../node_modules/core-js/modules/es6.array.last-index-of.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.array.species.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.constructor.js","../../node_modules/core-js/modules/_regexp-exec.js","../../node_modules/core-js/modules/es6.regexp.exec.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/es6.regexp.to-string.js","../../node_modules/core-js/modules/_advance-string-index.js","../../node_modules/core-js/modules/_regexp-exec-abstract.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/es6.typed.data-view.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.enumerate.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_flatten-into-array.js","../../node_modules/core-js/modules/es7.array.flat-map.js","../../node_modules/core-js/modules/es7.array.flatten.js","../../node_modules/core-js/modules/es7.string.at.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/es7.string.trim-left.js","../../node_modules/core-js/modules/es7.string.trim-right.js","../../node_modules/core-js/modules/es7.string.match-all.js","../../node_modules/core-js/modules/es7.symbol.async-iterator.js","../../node_modules/core-js/modules/es7.symbol.observable.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/_object-forced-pam.js","../../node_modules/core-js/modules/es7.object.define-getter.js","../../node_modules/core-js/modules/es7.object.define-setter.js","../../node_modules/core-js/modules/es7.object.lookup-getter.js","../../node_modules/core-js/modules/es7.object.lookup-setter.js","../../node_modules/core-js/modules/_array-from-iterable.js","../../node_modules/core-js/modules/_collection-to-json.js","../../node_modules/core-js/modules/es7.map.to-json.js","../../node_modules/core-js/modules/es7.set.to-json.js","../../node_modules/core-js/modules/_set-collection-of.js","../../node_modules/core-js/modules/es7.map.of.js","../../node_modules/core-js/modules/es7.set.of.js","../../node_modules/core-js/modules/es7.weak-map.of.js","../../node_modules/core-js/modules/es7.weak-set.of.js","../../node_modules/core-js/modules/_set-collection-from.js","../../node_modules/core-js/modules/es7.map.from.js","../../node_modules/core-js/modules/es7.set.from.js","../../node_modules/core-js/modules/es7.weak-map.from.js","../../node_modules/core-js/modules/es7.weak-set.from.js","../../node_modules/core-js/modules/es7.global.js","../../node_modules/core-js/modules/es7.system.global.js","../../node_modules/core-js/modules/es7.error.is-error.js","../../node_modules/core-js/modules/es7.math.clamp.js","../../node_modules/core-js/modules/es7.math.deg-per-rad.js","../../node_modules/core-js/modules/es7.math.degrees.js","../../node_modules/core-js/modules/_math-scale.js","../../node_modules/core-js/modules/es7.math.fscale.js","../../node_modules/core-js/modules/es7.math.iaddh.js","../../node_modules/core-js/modules/es7.math.isubh.js","../../node_modules/core-js/modules/es7.math.imulh.js","../../node_modules/core-js/modules/es7.math.rad-per-deg.js","../../node_modules/core-js/modules/es7.math.radians.js","../../node_modules/core-js/modules/es7.math.scale.js","../../node_modules/core-js/modules/es7.math.umulh.js","../../node_modules/core-js/modules/es7.math.signbit.js","../../node_modules/core-js/modules/es7.promise.finally.js","../../node_modules/core-js/modules/es7.promise.try.js","../../node_modules/core-js/modules/_metadata.js","../../node_modules/core-js/modules/es7.reflect.define-metadata.js","../../node_modules/core-js/modules/es7.reflect.delete-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","../../node_modules/core-js/modules/es7.reflect.has-metadata.js","../../node_modules/core-js/modules/es7.reflect.has-own-metadata.js","../../node_modules/core-js/modules/es7.reflect.metadata.js","../../node_modules/core-js/modules/es7.asap.js","../../node_modules/core-js/modules/es7.observable.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/core-js/shim.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/core-js/modules/_replacer.js","../../node_modules/core-js/modules/core.regexp.escape.js","../../node_modules/core-js/fn/regexp/escape.js","../../node_modules/babel-polyfill/lib/index.js","scrollspy.js","sphinx_materialdesign_theme.js"],"names":["$","document","ready","on","remove","show","ga","hitType","eventCategory","eventAction","attr","eventLabel","window","location","pathname","eventValue","MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","getAttribute","charAt","preventDefault","href","split","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","selectTab","content_","IS_ACTIVE","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","TAB_MANUAL_SWITCH","componentHandler","upgradeDom","optJsClass","optCssClass","upgradeElement","element","upgradeElements","elements","upgradeAllRegistered","registerUpgradedCallback","jsClass","callback","register","config","downgradeElements","nodes","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","getUpgradedListOfElement_","dataUpgraded","isElementUpgraded_","upgradedList","indexOf","createEvent_","eventType","bubbles","cancelable","CustomEvent","ev","createEvent","initEvent","upgradeDomInternal","cssClass","registeredClass","querySelectorAll","n","upgradeElementInternal","Element","Error","upgradingEv","dispatchEvent","defaultPrevented","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","upgradedEv","deconstructComponentInternal","componentIndex","splice","upgrades","componentPlace","classAsString","upgradeElementsInternal","Array","isArray","prototype","slice","call","HTMLElement","children","upgradeAllRegisteredInternal","registerUpgradedCallbackInternal","regClass","registerInternal","widgetMissing","newConfig","constructor","item","hasOwnProperty","downgradeNodesInternal","downgradeNode","node","filter","NodeList","Node","ComponentConfigPublic","ComponentConfig","Component","documentElement","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","MaterialButton","this","init","Constant_","RIPPLE_EFFECT","blurHandler_","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","parentElement","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","items","boundItemKeydown_","handleItemKeyboardEvent_","boundItemClick_","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","removeAnimationEndListener_","addAnimationEndListener_","transitionDuration","itemDelay","transitionDelay","parentNode","removeEventListener","removeProperty","MaterialProgress","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","btnElement_","onMouseup_","boundChangeHandler_","boundFocusHandler_","boundBlurHandler_","boundMouseUpHandler_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSnackbar","textElement_","cssClasses_","MESSAGE","actionElement_","ACTION","active","actionHandler_","undefined","message_","actionText_","queuedNotifications_","setActionHidden_","ANIMATION_LENGTH","SNACKBAR","ACTIVE","displaySnackbar_","textContent","cleanup_","timeout_","showSnackbar","data","checkQueue_","shift","Boolean","removeAttribute","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","index","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","start","MaterialSwitch","TRACK","THUMB","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","HAS_PLACEHOLDER","onKeyDown_","currentRowCount","onReset_","checkValidity","checkDirty","checkFocus","input_","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundResetHandler","boundKeyDownHandler","invalid","MaterialTooltip","BOTTOM","LEFT","RIGHT","TOP","handleMouseEnter_","props","marginLeft","offsetWidth","marginTop","hideTooltip_","boundMouseEnterHandler","boundMouseLeaveAndScrollHandler","MaterialLayout","MAX_WIDTH","TAB_SCROLL_PIXELS","RESIZE_TIMEOUT","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","headerVisible","scrollTop","keyboardEventHandler_","drawer_","toggleDrawer","screenSizeHandler_","screenSizeMediaQuery_","matches","obfuscator_","drawerToggleHandler_","type","headerTransitionEndHandler_","headerClickHandler_","tabBar","drawerButton","focusedElement","directChildren","childNodes","numChildren","c","child","persisted","overflowY","mode","drawerButtonIcon","innerHTML","firstChild","obfuscator","matchMedia","addListener","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabUpdateHandler","scrollWidth","windowResizeHandler","resizeTimeoutId_","MaterialDataTable","DATA_TABLE","SELECTABLE","SELECT_ELEMENT","IS_SELECTED","selectRow_","checkbox","row","opt_rows","createCheckbox_","label","labelClasses","firstHeader","bodyRows","footRows","rows","concat","th","headerCheckbox","firstCell","td","nodeName","toUpperCase","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","offset","webkitTransform","msTransform","transform","ScrollSpy","args","doc","nav","navSelector","win","winHeight","innerHeight","scrollElement","scrollSelector","contents","getContents","contentSelector","attachEvent","scrollTimer","resizeTimer","spy","tagName","onclickToc","navElement","targets","getViewState","toggleNavClass","elementListInView","current","isView","subHeaderRect","headerHeight","scrollBottom","elementTop","elementBottom","maxDepth","maxDepthElement","tempDepth","getTagDepth","id","find","get","reconstructionDrawerGlobalToc","$lists","$breadcrumb","each","li","$li","$linkWrapper","$link","append","isCurrent","hasClass","$ul","ulId","addClass","$toggleWrapper","$toggle","toggleClass","animate","opacity","parent","url","text","button","icon","createTextNode","link","onclick","fileName","pop","replace","hint","hintText","map","header","first","css","preScrollTop","curScrollTop","scrollContent","navBar","navBarHeight","scroll","removeClass","addScrollAwareHeaderAnimation"],"mappings":"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","file":"sphinx_materialdesign_theme.js","sourceRoot":"../../src/js","sourcesContent":["/*!\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\n$(document).ready(function() {\n $(\".feedback-answer\").on(\"click\", function () {\n $(\".feedback-question\").remove();\n $(\".feedback-answer-container\").remove();\n $(\".feedback-thank-you\").show();\n ga(\"send\", {\n hitType: \"event\",\n eventCategory: \"Did this page help you?\",\n eventAction: $(this).attr(\"data-response\"),\n eventLabel: window.location.pathname || \"unknown\",\n eventValue: $(this).attr(\"data-response\") === \"yes\" ? 1 : 0\n });\n });\n});\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRipple'] = MaterialRipple;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n/**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function (event) {\n if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n var rect = this.element_.getBoundingClientRect();\n this.boundHeight = rect.height;\n this.boundWidth = rect.width;\n this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n this.ignoringMouseDown_ = false;\n } else {\n if (event.type === 'touchstart') {\n this.ignoringMouseDown_ = true;\n }\n var frameCount = this.getFrameCount();\n if (frameCount > 0) {\n return;\n }\n this.setFrameCount(1);\n var bound = event.currentTarget.getBoundingClientRect();\n var x;\n var y;\n // Check if we are handling a keyboard click.\n if (event.clientX === 0 && event.clientY === 0) {\n x = Math.round(bound.width / 2);\n y = Math.round(bound.height / 2);\n } else {\n var clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY !== undefined ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n/**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function (event) {\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n // Allow a repaint to occur before removing this class, so the animation\n // shows for tap events, which seem to trigger a mouseup too soon after\n // mousedown.\n window.setTimeout(function () {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }.bind(this), 0);\n }\n};\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function () {\n if (this.element_) {\n var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n // Touch start produces a compat mouse down event, which would cause a\n // second ripples. To avoid that, we use this property to ignore the first\n // mouse down after a touch start.\n this.ignoringMouseDown_ = false;\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown', this.boundDownHandler);\n this.element_.addEventListener('touchstart', this.boundDownHandler);\n this.boundUpHandler = this.upHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundUpHandler);\n this.element_.addEventListener('mouseleave', this.boundUpHandler);\n this.element_.addEventListener('touchend', this.boundUpHandler);\n this.element_.addEventListener('blur', this.boundUpHandler);\n /**\n * Getter for frameCount_.\n * @return {number} the frame count.\n */\n this.getFrameCount = function () {\n return this.frameCount_;\n };\n /**\n * Setter for frameCount_.\n * @param {number} fC the frame count.\n */\n this.setFrameCount = function (fC) {\n this.frameCount_ = fC;\n };\n /**\n * Getter for rippleElement_.\n * @return {Element} the ripple element.\n */\n this.getRippleElement = function () {\n return this.rippleElement_;\n };\n /**\n * Sets the ripple X and Y coordinates.\n * @param {number} newX the new X coordinate\n * @param {number} newY the new Y coordinate\n */\n this.setRippleXY = function (newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\n /**\n * Sets the ripple styles.\n * @param {boolean} start whether or not this is the start frame.\n */\n this.setRippleStyles = function (start) {\n if (this.rippleElement_ !== null) {\n var transformString;\n var scale;\n var size;\n var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n if (start) {\n scale = this.Constant_.INITIAL_SCALE;\n size = this.Constant_.INITIAL_SIZE;\n } else {\n scale = this.Constant_.FINAL_SCALE;\n size = this.rippleSize_ + 'px';\n if (recentering) {\n offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n }\n }\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n if (start) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n } else {\n this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n };\n /**\n * Handles an animation frame.\n */\n this.animFrameHandler = function () {\n if (this.frameCount_-- > 0) {\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n } else {\n this.setRippleStyles(false);\n }\n };\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n MDL_RIPPLE: 'mdl-ripple',\n MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n * Handle clicks to a tabs component\n *\n * @private\n */\nMaterialTabs.prototype.initTabs_ = function () {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n // Create new tabs for each tab element\n for (var i = 0; i < this.tabs_.length; i++) {\n new MaterialTab(this.tabs_[i], this);\n }\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetTabState_ = function () {\n for (var k = 0; k < this.tabs_.length; k++) {\n this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function () {\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Initialize element.\n */\nMaterialTabs.prototype.init = function () {\n if (this.element_) {\n this.initTabs_();\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {Element} tab The HTML element for the tab.\n * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n */\nfunction MaterialTab(tab, ctx) {\n if (tab) {\n if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = ctx.element_.querySelector('#' + href);\n ctx.resetTabState_();\n ctx.resetPanelState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n }\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialLayout'] = MaterialLayout;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n RESIZE_TIMEOUT: 100,\n MENU_ICON: '',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32\n};\n/**\n * Modes.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialLayout.prototype.CssClasses_ = {\n CONTAINER: 'mdl-layout__container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n ICON: 'material-icons',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n RIPPLE: 'mdl-ripple',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n TAB_BAR: 'mdl-layout__tab-bar',\n TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n TAB: 'mdl-layout__tab',\n TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n TAB_MANUAL_SWITCH: 'mdl-layout__tab-manual-switch',\n PANEL: 'mdl-layout__tab-panel',\n HAS_DRAWER: 'has-drawer',\n HAS_TABS: 'has-tabs',\n HAS_SCROLLING_HEADER: 'has-scrolling-header',\n CASTING_SHADOW: 'is-casting-shadow',\n IS_COMPACT: 'is-compact',\n IS_SMALL_SCREEN: 'is-small-screen',\n IS_DRAWER_OPEN: 'is-visible',\n IS_ACTIVE: 'is-active',\n IS_UPGRADED: 'is-upgraded',\n IS_ANIMATING: 'is-animating',\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n * Handles scrolling on the content.\n *\n * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n var headerVisible = !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) || this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n};\n/**\n * Handles a keyboard event on the drawer.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.keyboardEventHandler_ = function (evt) {\n // Only react when the drawer is open.\n if (evt.keyCode === this.Keycodes_.ESCAPE && this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.toggleDrawer();\n }\n};\n/**\n * Handles changes in screen size.\n *\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n if (this.screenSizeMediaQuery_.matches) {\n this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n // Collapse drawer (if any) when moving to a large screen size.\n if (this.drawer_) {\n this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n }\n }\n};\n/**\n * Handles events of drawer button.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function (evt) {\n if (evt && evt.type === 'keydown') {\n if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n // prevent scrolling in drawer nav\n evt.preventDefault();\n } else {\n // prevent other keys\n return;\n }\n }\n this.toggleDrawer();\n};\n/**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n * Handles expanding the header on click\n *\n * @private\n */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n for (var k = 0; k < tabBar.length; k++) {\n tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Toggle drawer state\n *\n * @public\n */\nMaterialLayout.prototype.toggleDrawer = function () {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n // Set accessibility properties.\n if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.drawer_.setAttribute('aria-hidden', 'false');\n drawerButton.setAttribute('aria-expanded', 'true');\n } else {\n this.drawer_.setAttribute('aria-hidden', 'true');\n drawerButton.setAttribute('aria-expanded', 'false');\n }\n};\nMaterialLayout.prototype['toggleDrawer'] = MaterialLayout.prototype.toggleDrawer;\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function () {\n if (this.element_) {\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n var focusedElement = this.element_.querySelector(':focus');\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n if (focusedElement) {\n focusedElement.focus();\n }\n var directChildren = this.element_.childNodes;\n var numChildren = directChildren.length;\n for (var c = 0; c < numChildren; c++) {\n var child = directChildren[c];\n if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n window.addEventListener('pageshow', function (e) {\n if (e.persisted) {\n // when page is loaded from back/forward cache\n // trigger repaint to let layout scroll in safari\n this.element_.style.overflowY = 'hidden';\n requestAnimationFrame(function () {\n this.element_.style.overflowY = '';\n }.bind(this));\n }\n }.bind(this), false);\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n var mode = this.Mode_.STANDARD;\n if (this.header_) {\n if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n mode = this.Mode_.SEAMED;\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\n if (mode === this.Mode_.STANDARD) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.WATERFALL) {\n // Add and remove shadows depending on scroll position.\n // Also add/remove auxiliary class for styling of the compact version of\n // the header.\n this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n if (!drawerButton) {\n drawerButton = document.createElement('div');\n drawerButton.setAttribute('aria-expanded', 'false');\n drawerButton.setAttribute('role', 'button');\n drawerButton.setAttribute('tabindex', '0');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n }\n if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n }\n drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n drawerButton.addEventListener('keydown', this.drawerToggleHandler_.bind(this));\n // Add a class if the layout has a drawer, for altering the left padding.\n // Adds the HAS_DRAWER to the elements since this.header_ may or may\n // not be present.\n this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n // If we have a fixed header, add the button to the header rather than\n // the layout.\n if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n this.header_.insertBefore(drawerButton, this.header_.firstChild);\n } else {\n this.element_.insertBefore(drawerButton, this.content_);\n }\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.element_.appendChild(obfuscator);\n obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n this.obfuscator_ = obfuscator;\n this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n this.drawer_.setAttribute('aria-hidden', 'true');\n }\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n var tabContainer = document.createElement('div');\n tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n this.header_.insertBefore(tabContainer, this.tabBar_);\n this.header_.removeChild(this.tabBar_);\n var leftButton = document.createElement('div');\n leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n var leftButtonIcon = document.createElement('i');\n leftButtonIcon.classList.add(this.CssClasses_.ICON);\n leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n leftButton.appendChild(leftButtonIcon);\n leftButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n var rightButton = document.createElement('div');\n rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n var rightButtonIcon = document.createElement('i');\n rightButtonIcon.classList.add(this.CssClasses_.ICON);\n rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n rightButton.appendChild(rightButtonIcon);\n rightButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n // Add and remove tab buttons depending on scroll position and total\n // window size.\n var tabUpdateHandler = function () {\n if (this.tabBar_.scrollLeft > 0) {\n leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n }.bind(this);\n this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n tabUpdateHandler();\n // Update tabs when the window resizes.\n var windowResizeHandler = function () {\n // Use timeouts to make sure it doesn't happen too often.\n if (this.resizeTimeoutId_) {\n clearTimeout(this.resizeTimeoutId_);\n }\n this.resizeTimeoutId_ = setTimeout(function () {\n tabUpdateHandler();\n this.resizeTimeoutId_ = null;\n }.bind(this), this.Constant_.RESIZE_TIMEOUT);\n }.bind(this);\n window.addEventListener('resize', windowResizeHandler);\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n // Create new tabs for each tab element\n for (var i = 0; i < tabs.length; i++) {\n new MaterialLayoutTab(tabs[i], tabs, panels, this);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {HTMLElement} tab The HTML element for the tab.\n * @param {!Array} tabs Array with HTML elements for all tabs.\n * @param {!Array} panels Array with HTML elements for all panels.\n * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.\n */\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n /**\n * Auxiliary method to programmatically select a tab in the UI.\n */\n function selectTab() {\n var href = tab.href.split('#')[1];\n var panel = layout.content_.querySelector('#' + href);\n layout.resetTabState_(tabs);\n layout.resetPanelState_(panels);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n }\n if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(layout.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n if (!layout.tabBar_.classList.contains(layout.CssClasses_.TAB_MANUAL_SWITCH)) {\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n selectTab();\n }\n });\n }\n tab.show = selectTab;\n}\nwindow['MaterialLayoutTab'] = MaterialLayoutTab;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the componentHandler interface, for closure documentation and\n// static verification.\nvar componentHandler = {\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n upgradeDom: function(optJsClass, optCssClass) {},\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n upgradeElement: function(element, optJsClass) {},\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n upgradeElements: function(elements) {},\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n upgradeAllRegistered: function() {},\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n registerUpgradedCallback: function(jsClass, callback) {},\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config the registration configuration\n */\n register: function(config) {},\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function() {\n 'use strict';\n\n /** @type {!Array} */\n var registeredComponents_ = [];\n\n /** @type {!Array} */\n var createdComponents_ = [];\n\n var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n /**\n * Searches registered components for a class we are interested in using.\n * Optionally replaces a match with passed object if specified.\n *\n * @param {string} name The name of a class we want to use.\n * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n * @return {!Object|boolean}\n * @private\n */\n function findRegisteredClass_(name, optReplace) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n if (registeredComponents_[i].className === name) {\n if (typeof optReplace !== 'undefined') {\n registeredComponents_[i] = optReplace;\n }\n return registeredComponents_[i];\n }\n }\n return false;\n }\n\n /**\n * Returns an array of the classNames of the upgraded classes on the element.\n *\n * @param {!Element} element The element to fetch data from.\n * @return {!Array}\n * @private\n */\n function getUpgradedListOfElement_(element) {\n var dataUpgraded = element.getAttribute('data-upgraded');\n // Use `['']` as default value to conform the `,name,name...` style.\n return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n }\n\n /**\n * Returns true if the given element has already been upgraded for the given\n * class.\n *\n * @param {!Element} element The element we want to check.\n * @param {string} jsClass The class to check for.\n * @returns {boolean}\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Create an event object.\n *\n * @param {string} eventType The type name of the event.\n * @param {boolean} bubbles Whether the event should bubble up the DOM.\n * @param {boolean} cancelable Whether the event can be canceled.\n * @returns {!Event}\n */\n function createEvent_(eventType, bubbles, cancelable) {\n if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n return new CustomEvent(eventType, {\n bubbles: bubbles,\n cancelable: cancelable\n });\n } else {\n var ev = document.createEvent('Events');\n ev.initEvent(eventType, bubbles, cancelable);\n return ev;\n }\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n function upgradeDomInternal(optJsClass, optCssClass) {\n if (typeof optJsClass === 'undefined' &&\n typeof optCssClass === 'undefined') {\n for (var i = 0; i < registeredComponents_.length; i++) {\n upgradeDomInternal(registeredComponents_[i].className,\n registeredComponents_[i].cssClass);\n }\n } else {\n var jsClass = /** @type {string} */ (optJsClass);\n if (typeof optCssClass === 'undefined') {\n var registeredClass = findRegisteredClass_(jsClass);\n if (registeredClass) {\n optCssClass = registeredClass.cssClass;\n }\n }\n\n var elements = document.querySelectorAll('.' + optCssClass);\n for (var n = 0; n < elements.length; n++) {\n upgradeElementInternal(elements[n], jsClass);\n }\n }\n }\n\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n // Allow upgrade to be canceled by canceling emitted event.\n var upgradingEv = createEvent_('mdl-componentupgrading', true, true);\n element.dispatchEvent(upgradingEv);\n if (upgradingEv.defaultPrevented) {\n return;\n }\n\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function(component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var upgradedEv = createEvent_('mdl-componentupgraded', true, false);\n element.dispatchEvent(upgradedEv);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (elements instanceof Element) {\n elements = [elements];\n } else {\n elements = Array.prototype.slice.call(elements);\n }\n }\n for (var i = 0, n = elements.length, element; i < n; i++) {\n element = elements[i];\n if (element instanceof HTMLElement) {\n upgradeElementInternal(element);\n if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config\n */\n function registerInternal(config) {\n // In order to support both Closure-compiled and uncompiled code accessing\n // this method, we need to allow for both the dot and array syntax for\n // property access. You'll therefore see the `foo.bar || foo['bar']`\n // pattern repeated across this method.\n var widgetMissing = (typeof config.widget === 'undefined' &&\n typeof config['widget'] === 'undefined');\n var widget = true;\n\n if (!widgetMissing) {\n widget = config.widget || config['widget'];\n }\n\n var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n classConstructor: config.constructor || config['constructor'],\n className: config.classAsString || config['classAsString'],\n cssClass: config.cssClass || config['cssClass'],\n widget: widget,\n callbacks: []\n });\n\n registeredComponents_.forEach(function(item) {\n if (item.cssClass === newConfig.cssClass) {\n throw new Error('The provided cssClass has already been registered: ' + item.cssClass);\n }\n if (item.className === newConfig.className) {\n throw new Error('The provided className has already been registered');\n }\n });\n\n if (config.constructor.prototype\n .hasOwnProperty(componentConfigProperty_)) {\n throw new Error(\n 'MDL component classes must not have ' + componentConfigProperty_ +\n ' defined as a property.');\n }\n\n var found = findRegisteredClass_(config.classAsString, newConfig);\n\n if (!found) {\n registeredComponents_.push(newConfig);\n }\n }\n\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n function registerUpgradedCallbackInternal(jsClass, callback) {\n var regClass = findRegisteredClass_(jsClass);\n if (regClass) {\n regClass.callbacks.push(callback);\n }\n }\n\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n function upgradeAllRegisteredInternal() {\n for (var n = 0; n < registeredComponents_.length; n++) {\n upgradeDomInternal(registeredComponents_[n].className);\n }\n }\n\n /**\n * Check the component for the downgrade method.\n * Execute if found.\n * Remove component from createdComponents list.\n *\n * @param {?componentHandler.Component} component\n */\n function deconstructComponentInternal(component) {\n if (component) {\n var componentIndex = createdComponents_.indexOf(component);\n createdComponents_.splice(componentIndex, 1);\n\n var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev = createEvent_('mdl-componentdowngraded', true, false);\n component.element_.dispatchEvent(ev);\n }\n }\n\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n function downgradeNodesInternal(nodes) {\n /**\n * Auxiliary function to downgrade a single node.\n * @param {!Node} node the node to be downgraded\n */\n var downgradeNode = function(node) {\n createdComponents_.filter(function(item) {\n return item.element_ === node;\n }).forEach(deconstructComponentInternal);\n };\n if (nodes instanceof Array || nodes instanceof NodeList) {\n for (var n = 0; n < nodes.length; n++) {\n downgradeNode(nodes[n]);\n }\n } else if (nodes instanceof Node) {\n downgradeNode(nodes);\n } else {\n throw new Error('Invalid argument provided to downgrade MDL nodes.');\n }\n }\n\n // Now return the functions that should be made public with their publicly\n // facing names...\n return {\n upgradeDom: upgradeDomInternal,\n upgradeElement: upgradeElementInternal,\n upgradeElements: upgradeElementsInternal,\n upgradeAllRegistered: upgradeAllRegisteredInternal,\n registerUpgradedCallback: registerUpgradedCallbackInternal,\n register: registerInternal,\n downgradeElements: downgradeNodesInternal\n };\n})();\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: Function,\n * classAsString: string,\n * cssClass: string,\n * widget: (string|boolean|undefined)\n * }}\n */\ncomponentHandler.ComponentConfigPublic; // jshint ignore:line\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: !Function,\n * className: string,\n * cssClass: string,\n * widget: (string|boolean),\n * callbacks: !Array\n * }}\n */\ncomponentHandler.ComponentConfig; // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * element_: !HTMLElement,\n * className: string,\n * classAsString: string,\n * cssClass: string,\n * widget: string\n * }}\n */\ncomponentHandler.Component; // jshint ignore:line\n\n// Export all symbols, for the benefit of Closure compiler.\n// No effect on uncompiled code.\ncomponentHandler['upgradeDom'] = componentHandler.upgradeDom;\ncomponentHandler['upgradeElement'] = componentHandler.upgradeElement;\ncomponentHandler['upgradeElements'] = componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered'] =\n componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback'] =\n componentHandler.registerUpgradedCallback;\ncomponentHandler['register'] = componentHandler.register;\ncomponentHandler['downgradeElements'] = componentHandler.downgradeElements;\nwindow.componentHandler = componentHandler;\nwindow['componentHandler'] = componentHandler;\n\nwindow.addEventListener('load', function() {\n 'use strict';\n\n /**\n * Performs a \"Cutting the mustard\" test. If the browser supports the features\n * tested, adds a mdl-js class to the element. It then upgrades all MDL\n * components requiring JavaScript.\n */\n if ('classList' in document.createElement('div') &&\n 'querySelector' in document &&\n 'addEventListener' in window && Array.prototype.forEach) {\n document.documentElement.classList.add('mdl-js');\n componentHandler.upgradeAllRegistered();\n } else {\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.upgradeElement = function() {};\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.register = function() {};\n }\n});\n","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n /**\n * Date.now polyfill.\n * @return {number} the current Date\n */\n Date.now = function () {\n return new Date().getTime();\n };\n Date['now'] = Date.now;\n}\nvar vendors = [\n 'webkit',\n 'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n /**\n * requestAnimationFrame polyfill.\n * @param {!Function} callback the callback function.\n */\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialButton'] = MaterialButton;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialButton.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialButton.prototype.blurHandler_ = function (event) {\n if (event) {\n this.element_.blur();\n }\n};\n// Public methods.\n/**\n * Disable button.\n *\n * @public\n */\nMaterialButton.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n/**\n * Enable button.\n *\n * @public\n */\nMaterialButton.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function () {\n if (this.element_) {\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleElement_ = document.createElement('span');\n this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(this.rippleElement_);\n this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n this.element_.appendChild(rippleContainer);\n }\n this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialCheckbox'] = MaterialCheckbox;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialCheckbox.prototype['checkToggleState'] = MaterialCheckbox.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialCheckbox.prototype['checkDisabled'] = MaterialCheckbox.prototype.checkDisabled;\n/**\n * Disable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n/**\n * Enable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n/**\n * Check checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n/**\n * Uncheck checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n boxOutline.appendChild(tickOutline);\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for icon toggle MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialIconToggle'] = MaterialIconToggle;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialIconToggle.prototype['checkToggleState'] = MaterialIconToggle.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialIconToggle.prototype['checkDisabled'] = MaterialIconToggle.prototype.checkDisabled;\n/**\n * Disable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable'] = MaterialIconToggle.prototype.disable;\n/**\n * Enable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n/**\n * Check icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n/**\n * Uncheck icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck'] = MaterialIconToggle.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left',\n // This is the default.\n BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n TOP_LEFT: 'mdl-menu--top-left',\n TOP_RIGHT: 'mdl-menu--top-right',\n UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n * Initialize element.\n */\nMaterialMenu.prototype.init = function () {\n if (this.element_) {\n // Create container for the menu.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n this.container_ = container;\n // Create outline for the menu (shadow and background).\n var outline = document.createElement('div');\n outline.classList.add(this.CssClasses_.OUTLINE);\n this.outline_ = outline;\n container.insertBefore(outline, this.element_);\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n var forEl = null;\n if (forElId) {\n forEl = document.getElementById(forElId);\n if (forEl) {\n this.forElement_ = forEl;\n forEl.addEventListener('click', this.handleForClick_.bind(this));\n forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n }\n }\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);\n this.boundItemClick_ = this.handleItemClick_.bind(this);\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.boundItemClick_);\n // Add a tab index to each menu item.\n items[i].tabIndex = '-1';\n // Add a keyboard listener to each menu item.\n items[i].addEventListener('keydown', this.boundItemKeydown_);\n }\n // Add ripple classes to each item, if the user has enabled ripples.\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\n }\n // Copy alignment classes to the container, so the outline can use them.\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n }\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Handles a click on the \"for\" element, by positioning the menu and then\n * toggling it.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Position below the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Position above the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Position above the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n this.toggle(evt);\n};\n/**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n items[items.length - 1].focus();\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n items[0].focus();\n }\n }\n }\n};\n/**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n } else {\n items[items.length - 1].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n if (items.length > currentIndex + 1) {\n items[currentIndex + 1].focus();\n } else {\n items[0].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n evt.preventDefault();\n // Send mousedown and mouseup to trigger ripple.\n var e = new MouseEvent('mousedown');\n evt.target.dispatchEvent(e);\n e = new MouseEvent('mouseup');\n evt.target.dispatchEvent(e);\n // Send click.\n evt.target.click();\n } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n evt.preventDefault();\n this.hide();\n }\n }\n }\n};\n/**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n if (evt.target.hasAttribute('disabled')) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function (evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n/**\n * Calculates the initial clip (for opening the menu) or final clip (for closing\n * it), and applies it. This allows us to animate from or to the correct point,\n * that is, the point it's aligned to in the \"for\" element.\n *\n * @param {number} height Height of the clip rectangle\n * @param {number} width Width of the clip rectangle\n * @private\n */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = '';\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Clip to the top right corner of the menu.\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Clip to the bottom left corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Clip to the bottom right corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.element_.style.clip = '';\n }\n};\n/**\n * Cleanup function to remove animation listeners.\n *\n * @param {Event} evt\n * @private\n */\nMaterialMenu.prototype.removeAnimationEndListener_ = function (evt) {\n evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n};\n/**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n};\n/**\n * Displays the menu.\n *\n * @public\n */\nMaterialMenu.prototype.show = function (evt) {\n if (this.element_ && this.container_ && this.outline_) {\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Apply the inner element's size to the container and outline.\n this.container_.style.width = width + 'px';\n this.container_.style.height = height + 'px';\n this.outline_.style.width = width + 'px';\n this.outline_.style.height = height + 'px';\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n // Calculate transition delays for individual menu items, so that they fade\n // in one at a time.\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n var itemDelay = null;\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n } else {\n itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n // Wait for the next frame, turn on animation, and apply the final clip.\n // Also make it visible. This triggers the transitions.\n window.requestAnimationFrame(function () {\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n }.bind(this));\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n // Add a click listener to the document, to close the menu.\n var callback = function (e) {\n // Check to see if the document is processing the same event that\n // displayed the menu in the first place. If so, do nothing.\n // Also check to see if the menu is in the process of closing itself, and\n // do nothing in that case.\n // Also check if the clicked element is a menu item\n // if so, do nothing.\n if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\nMaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n/**\n * Hides the menu.\n *\n * @public\n */\nMaterialMenu.prototype.hide = function () {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n // Remove all transition delays; menu items fade out concurrently.\n for (var i = 0; i < items.length; i++) {\n items[i].style.removeProperty('transition-delay');\n }\n // Measure the inner element.\n var rect = this.element_.getBoundingClientRect();\n var height = rect.height;\n var width = rect.width;\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.applyClip_(height, width);\n this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n};\nMaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n/**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\nMaterialMenu.prototype.toggle = function (evt) {\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\nMaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialProgress'] = MaterialProgress;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialProgress.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n * Set the current progress of the progressbar.\n *\n * @param {number} p Percentage of the progress (0-100)\n * @public\n */\nMaterialProgress.prototype.setProgress = function (p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n this.progressbar_.style.width = p + '%';\n};\nMaterialProgress.prototype['setProgress'] = MaterialProgress.prototype.setProgress;\n/**\n * Set the current progress of the buffer.\n *\n * @param {number} p Percentage of the buffer (0-100)\n * @public\n */\nMaterialProgress.prototype.setBuffer = function (p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = 100 - p + '%';\n};\nMaterialProgress.prototype['setBuffer'] = MaterialProgress.prototype.setBuffer;\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function () {\n if (this.element_) {\n var el = document.createElement('div');\n el.className = 'progressbar bar bar1';\n this.element_.appendChild(el);\n this.progressbar_ = el;\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function (event) {\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n if (typeof radios[i]['MaterialRadio'] !== 'undefined') {\n radios[i]['MaterialRadio'].updateClasses_();\n }\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n this.blur_();\n};\n/**\n * Update classes.\n *\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialRadio.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.btnElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkDisabled = function () {\n if (this.btnElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialRadio.prototype['checkDisabled'] = MaterialRadio.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkToggleState = function () {\n if (this.btnElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialRadio.prototype['checkToggleState'] = MaterialRadio.prototype.checkToggleState;\n/**\n * Disable radio.\n *\n * @public\n */\nMaterialRadio.prototype.disable = function () {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n/**\n * Enable radio.\n *\n * @public\n */\nMaterialRadio.prototype.enable = function () {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n/**\n * Check radio.\n *\n * @public\n */\nMaterialRadio.prototype.check = function () {\n this.btnElement_.checked = true;\n this.onChange_(null);\n};\nMaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n/**\n * Uncheck radio.\n *\n * @public\n */\nMaterialRadio.prototype.uncheck = function () {\n this.btnElement_.checked = false;\n this.onChange_(null);\n};\nMaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function () {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n this.boundChangeHandler_ = this.onChange_.bind(this);\n this.boundFocusHandler_ = this.onChange_.bind(this);\n this.boundBlurHandler_ = this.onBlur_.bind(this);\n this.boundMouseUpHandler_ = this.onMouseup_.bind(this);\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n var rippleContainer;\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\n this.btnElement_.addEventListener('change', this.boundChangeHandler_);\n this.btnElement_.addEventListener('focus', this.boundFocusHandler_);\n this.btnElement_.addEventListener('blur', this.boundBlurHandler_);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSlider = function MaterialSlider(element) {\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSlider'] = MaterialSlider;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSlider.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n event.target.blur();\n};\n/**\n * Handle mousedown on container element.\n * This handler is purpose is to not require the use to click\n * exactly on the 2px slider element, as FireFox seems to be very\n * strict about this.\n *\n * @param {Event} event The event that fired.\n * @private\n * @suppress {missingProperties}\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n // If this click is not on the parent element (but rather some child)\n // ignore. It may still bubble up.\n if (event.target !== this.element_.parentElement) {\n return;\n }\n // Discard the original event and create a new event that\n // is on the slider element.\n event.preventDefault();\n var newEvent = new MouseEvent('mousedown', {\n target: event.target,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: this.element_.getBoundingClientRect().y\n });\n this.element_.dispatchEvent(newEvent);\n};\n/**\n * Handle updating of values.\n *\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function () {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n if (fraction === 0) {\n this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n }\n if (!this.isIE_) {\n this.backgroundLower_.style.flex = fraction;\n this.backgroundLower_.style.webkitFlex = fraction;\n this.backgroundUpper_.style.flex = 1 - fraction;\n this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n }\n};\n// Public methods.\n/**\n * Disable slider.\n *\n * @public\n */\nMaterialSlider.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n/**\n * Enable slider.\n *\n * @public\n */\nMaterialSlider.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n/**\n * Update slider value.\n *\n * @param {number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function (value) {\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\nMaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function () {\n if (this.element_) {\n if (this.isIE_) {\n // Since we need to specify a very large height in IE due to\n // implementation limitations, we add a parent here that trims it down to\n // a reasonable size.\n var containerIE = document.createElement('div');\n containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n this.element_.parentElement.insertBefore(containerIE, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n containerIE.appendChild(this.element_);\n } else {\n // For non-IE browsers, we need a div structure that sits behind the\n // slider and allows us to style the left and right sides of it with\n // different colors.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var backgroundFlex = document.createElement('div');\n backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n container.appendChild(backgroundFlex);\n this.backgroundLower_ = document.createElement('div');\n this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n backgroundFlex.appendChild(this.backgroundLower_);\n this.backgroundUpper_ = document.createElement('div');\n this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n backgroundFlex.appendChild(this.backgroundUpper_);\n }\n this.boundInputHandler = this.onInput_.bind(this);\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n this.element_.addEventListener('input', this.boundInputHandler);\n this.element_.addEventListener('change', this.boundChangeHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n this.updateValueStyles_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Snackbar MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSnackbar = function MaterialSnackbar(element) {\n this.element_ = element;\n this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);\n this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);\n if (!this.textElement_) {\n throw new Error('There must be a message element for a snackbar.');\n }\n if (!this.actionElement_) {\n throw new Error('There must be an action element for a snackbar.');\n }\n this.active = false;\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.queuedNotifications_ = [];\n this.setActionHidden_(true);\n};\nwindow['MaterialSnackbar'] = MaterialSnackbar;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSnackbar.prototype.Constant_ = {\n // The duration of the snackbar show/hide animation, in ms.\n ANIMATION_LENGTH: 250\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSnackbar.prototype.cssClasses_ = {\n SNACKBAR: 'mdl-snackbar',\n MESSAGE: 'mdl-snackbar__text',\n ACTION: 'mdl-snackbar__action',\n ACTIVE: 'mdl-snackbar--active'\n};\n/**\n * Display the snackbar.\n *\n * @private\n */\nMaterialSnackbar.prototype.displaySnackbar_ = function () {\n this.element_.setAttribute('aria-hidden', 'true');\n if (this.actionHandler_) {\n this.actionElement_.textContent = this.actionText_;\n this.actionElement_.addEventListener('click', this.actionHandler_);\n this.setActionHidden_(false);\n }\n this.textElement_.textContent = this.message_;\n this.element_.classList.add(this.cssClasses_.ACTIVE);\n this.element_.setAttribute('aria-hidden', 'false');\n setTimeout(this.cleanup_.bind(this), this.timeout_);\n};\n/**\n * Show the snackbar.\n *\n * @param {Object} data The data for the notification.\n * @public\n */\nMaterialSnackbar.prototype.showSnackbar = function (data) {\n if (data === undefined) {\n throw new Error('Please provide a data object with at least a message to display.');\n }\n if (data['message'] === undefined) {\n throw new Error('Please provide a message to be displayed.');\n }\n if (data['actionHandler'] && !data['actionText']) {\n throw new Error('Please provide action text with the handler.');\n }\n if (this.active) {\n this.queuedNotifications_.push(data);\n } else {\n this.active = true;\n this.message_ = data['message'];\n if (data['timeout']) {\n this.timeout_ = data['timeout'];\n } else {\n this.timeout_ = 2750;\n }\n if (data['actionHandler']) {\n this.actionHandler_ = data['actionHandler'];\n }\n if (data['actionText']) {\n this.actionText_ = data['actionText'];\n }\n this.displaySnackbar_();\n }\n};\nMaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;\n/**\n * Check if the queue has items within it.\n * If it does, display the next entry.\n *\n * @private\n */\nMaterialSnackbar.prototype.checkQueue_ = function () {\n if (this.queuedNotifications_.length > 0) {\n this.showSnackbar(this.queuedNotifications_.shift());\n }\n};\n/**\n * Cleanup the snackbar event listeners and accessiblity attributes.\n *\n * @private\n */\nMaterialSnackbar.prototype.cleanup_ = function () {\n this.element_.classList.remove(this.cssClasses_.ACTIVE);\n setTimeout(function () {\n this.element_.setAttribute('aria-hidden', 'true');\n this.textElement_.textContent = '';\n if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {\n this.setActionHidden_(true);\n this.actionElement_.textContent = '';\n this.actionElement_.removeEventListener('click', this.actionHandler_);\n }\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.active = false;\n this.checkQueue_();\n }.bind(this), this.Constant_.ANIMATION_LENGTH);\n};\n/**\n * Set the action handler hidden state.\n *\n * @param {boolean} value\n * @private\n */\nMaterialSnackbar.prototype.setActionHidden_ = function (value) {\n if (value) {\n this.actionElement_.setAttribute('aria-hidden', 'true');\n } else {\n this.actionElement_.removeAttribute('aria-hidden');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSnackbar,\n classAsString: 'MaterialSnackbar',\n cssClass: 'mdl-js-snackbar',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nvar MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSpinner'] = MaterialSpinner;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n * Auxiliary method to create a spinner layer.\n *\n * @param {number} index Index of the layer to be created.\n * @public\n */\nMaterialSpinner.prototype.createLayer = function (index) {\n var layer = document.createElement('div');\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n var leftClipper = document.createElement('div');\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n var rightClipper = document.createElement('div');\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n var circleOwners = [\n leftClipper,\n gapPatch,\n rightClipper\n ];\n for (var i = 0; i < circleOwners.length; i++) {\n var circle = document.createElement('div');\n circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n circleOwners[i].appendChild(circle);\n }\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer'] = MaterialSpinner.prototype.createLayer;\n/**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\nMaterialSpinner.prototype.stop = function () {\n this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n/**\n * Starts the spinner animation.\n * Public method for users who need to manually start the spinner for any reason\n * (instead of just adding the 'is-active' class to their markup).\n *\n * @public\n */\nMaterialSpinner.prototype.start = function () {\n this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function () {\n if (this.element_) {\n for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n this.createLayer(i);\n }\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSwitch'] = MaterialSwitch;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialSwitch.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialSwitch.prototype['checkDisabled'] = MaterialSwitch.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialSwitch.prototype['checkToggleState'] = MaterialSwitch.prototype.checkToggleState;\n/**\n * Disable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n/**\n * Enable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n/**\n * Activate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.on = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n/**\n * Deactivate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.off = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n thumb.appendChild(focusHelper);\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.inputElement_.addEventListener('change', this.boundChangeHandler);\n this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTextfield'] = MaterialTextfield;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded',\n HAS_PLACEHOLDER: 'has-placeholder'\n};\n/**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n var currentRowCount = event.target.value.split('\\n').length;\n if (event.keyCode === 13) {\n if (currentRowCount >= this.maxRows) {\n event.preventDefault();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle reset event from out side.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onReset_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n this.checkFocus();\n};\n// Public methods.\n/**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function () {\n if (this.input_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.checkDisabled;\n/**\n * Check the focus state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkFocus = function () {\n if (Boolean(this.element_.querySelector(':focus'))) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n }\n};\nMaterialTextfield.prototype['checkFocus'] = MaterialTextfield.prototype.checkFocus;\n/**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function () {\n if (this.input_.validity) {\n if (this.input_.validity.valid) {\n this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n } else {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n }\n};\nMaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;\n/**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDirty = function () {\n if (this.input_.value && this.input_.value.length > 0) {\n this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n }\n};\nMaterialTextfield.prototype['checkDirty'] = MaterialTextfield.prototype.checkDirty;\n/**\n * Disable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.disable = function () {\n this.input_.disabled = true;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n/**\n * Enable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.enable = function () {\n this.input_.disabled = false;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n/**\n * Update text field value.\n *\n * @param {string} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function (value) {\n this.input_.value = value || '';\n this.updateClasses_();\n};\nMaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function () {\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.input_) {\n if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n if (this.input_.hasAttribute('placeholder')) {\n this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n }\n this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.boundResetHandler = this.onReset_.bind(this);\n this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\n this.input_.addEventListener('reset', this.boundResetHandler);\n if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n // TODO: This should handle pasting multi line text.\n // Currently doesn't.\n this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n }\n var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n if (invalid) {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n if (this.input_.hasAttribute('autofocus')) {\n this.element_.focus();\n this.checkFocus();\n }\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTooltip'] = MaterialTooltip;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = {\n IS_ACTIVE: 'is-active',\n BOTTOM: 'mdl-tooltip--bottom',\n LEFT: 'mdl-tooltip--left',\n RIGHT: 'mdl-tooltip--right',\n TOP: 'mdl-tooltip--top'\n};\n/**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n var props = event.target.getBoundingClientRect();\n var left = props.left + props.width / 2;\n var top = props.top + props.height / 2;\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n var marginTop = -1 * (this.element_.offsetHeight / 2);\n if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n left = props.width / 2;\n if (top + marginTop < 0) {\n this.element_.style.top = '0';\n this.element_.style.marginTop = '0';\n } else {\n this.element_.style.top = top + 'px';\n this.element_.style.marginTop = marginTop + 'px';\n }\n } else {\n if (left + marginLeft < 0) {\n this.element_.style.left = '0';\n this.element_.style.marginLeft = '0';\n } else {\n this.element_.style.left = left + 'px';\n this.element_.style.marginLeft = marginLeft + 'px';\n }\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP)) {\n this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n this.element_.style.left = props.left + props.width + 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {\n this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';\n } else {\n this.element_.style.top = props.top + props.height + 10 + 'px';\n }\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Hide tooltip on mouseleave or scroll\n *\n * @private\n */\nMaterialTooltip.prototype.hideTooltip_ = function () {\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function () {\n if (this.element_) {\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n if (this.forElement_) {\n // It's left here because it prevents accidental text selection on Android\n if (!this.forElement_.hasAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveAndScrollHandler = this.hideTooltip_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveAndScrollHandler, false);\n window.addEventListener('scroll', this.boundMouseLeaveAndScrollHandler, true);\n window.addEventListener('touchstart', this.boundMouseLeaveAndScrollHandler);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Data Table Card MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialDataTable'] = MaterialDataTable;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n SELECT_ELEMENT: 'mdl-data-table__select',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Generates and returns a function that toggles the selection state of a\n * single row (or multiple rows).\n *\n * @param {Element} checkbox Checkbox that toggles the selection state.\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {\n if (row) {\n return function () {\n if (checkbox.checked) {\n row.classList.add(this.CssClasses_.IS_SELECTED);\n } else {\n row.classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }.bind(this);\n }\n if (opt_rows) {\n return function () {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].check();\n opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].uncheck();\n opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n/**\n * Creates a checkbox for a single or or multiple rows and hooks up the\n * event handling.\n *\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {\n var label = document.createElement('label');\n var labelClasses = [\n 'mdl-checkbox',\n 'mdl-js-checkbox',\n 'mdl-js-ripple-effect',\n this.CssClasses_.SELECT_ELEMENT\n ];\n label.className = labelClasses.join(' ');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (opt_rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function () {\n if (this.element_) {\n var firstHeader = this.element_.querySelector('th');\n var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));\n var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));\n var rows = bodyRows.concat(footRows);\n if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n var th = document.createElement('th');\n var headerCheckbox = this.createCheckbox_(null, rows);\n th.appendChild(headerCheckbox);\n firstHeader.parentElement.insertBefore(th, firstHeader);\n for (var i = 0; i < rows.length; i++) {\n var firstCell = rows[i].querySelector('td');\n if (firstCell) {\n var td = document.createElement('td');\n if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {\n var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n }\n rows[i].insertBefore(td, firstCell);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","module.exports = {};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","require('./_set-species')('Array');\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatten');\n","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export');\nvar $at = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","'use strict';\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = require('./_export');\nvar defined = require('./_defined');\nvar toLength = require('./_to-length');\nvar isRegExp = require('./_is-regexp');\nvar getFlags = require('./_flags');\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\n// Forced replacement prototype accessors methods\nmodule.exports = require('./_library') || !require('./_fails')(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete require('./_global')[K];\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') });\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\nrequire('./_set-collection-of')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\nrequire('./_set-collection-of')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\nrequire('./_set-collection-of')('WeakSet');\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\nrequire('./_set-collection-from')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\nrequire('./_set-collection-from')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\nrequire('./_set-collection-from')('WeakSet');\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', { global: require('./_global') });\n","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export');\nvar cof = require('./_cof');\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar scale = require('./_math-scale');\nvar fround = require('./_math-fround');\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { scale: require('./_math-scale') });\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n","// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = require('./_export');\nvar microtask = require('./_microtask')();\nvar process = require('./_global').process;\nvar isNode = require('./_cof')(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n","'use strict';\n// https://github.com/zenparsing/es-observable\nvar $export = require('./_export');\nvar global = require('./_global');\nvar core = require('./_core');\nvar microtask = require('./_microtask')();\nvar OBSERVABLE = require('./_wks')('observable');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar anInstance = require('./_an-instance');\nvar redefineAll = require('./_redefine-all');\nvar hide = require('./_hide');\nvar forOf = require('./_for-of');\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\nrequire('./_set-species')('Observable');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.exec');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.array.flat-map');\nrequire('./modules/es7.array.flatten');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.map.of');\nrequire('./modules/es7.set.of');\nrequire('./modules/es7.weak-map.of');\nrequire('./modules/es7.weak-set.of');\nrequire('./modules/es7.map.from');\nrequire('./modules/es7.set.from');\nrequire('./modules/es7.weak-map.from');\nrequire('./modules/es7.weak-set.from');\nrequire('./modules/es7.global');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.clamp');\nrequire('./modules/es7.math.deg-per-rad');\nrequire('./modules/es7.math.degrees');\nrequire('./modules/es7.math.fscale');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.rad-per-deg');\nrequire('./modules/es7.math.radians');\nrequire('./modules/es7.math.scale');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.math.signbit');\nrequire('./modules/es7.promise.finally');\nrequire('./modules/es7.promise.try');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export');\nvar $re = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;\n","\"use strict\";\n\nrequire(\"core-js/shim\");\n\nrequire(\"regenerator-runtime/runtime\");\n\nrequire(\"core-js/fn/regexp/escape\");\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});","export default class ScrollSpy {\n constructor(args) {\n\n this.doc = document;\n this.nav = this.doc.querySelectorAll(args.navSelector);\n\n if(!this.nav.length === 0) { return }\n\n this.win = window;\n this.winHeight = this.win.innerHeight;\n\n this.scrollElement = this.doc.querySelector(args.scrollSelector);\n this.className = args.className;\n this.offsetTop = args.offsetTop || 0;\n\n this.contents = [];\n this.contents = this.getContents(args.contentSelector);\n\n this.attachEvent();\n }\n\n attachEvent() {\n let scrollTimer;\n this.scrollElement.addEventListener('scroll', () => {\n if (scrollTimer) {\n clearTimeout(scrollTimer);\n }\n\n scrollTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n let resizeTimer;\n this.scrollElement.addEventListener('resize', () => {\n if (resizeTimer) {\n clearTimeout(resizeTimer);\n }\n\n resizeTimer = setTimeout(() => {\n this.spy();\n }, 1);\n });\n\n this.scrollElement.addEventListener(\"click\", (e) => {\n const target = e.target;\n if (target.tagName !== \"A\") return;\n window.onclickToc = true;\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href === target.href) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n });\n }\n\n getContents(contentSelector) {\n const targets = [];\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const href = this.nav[i].href;\n targets.push(this.doc.getElementById(href.split('#')[1]));\n }\n return targets;\n }\n\n spy() {\n let elements = this.getViewState();\n this.toggleNavClass(elements);\n }\n\n getViewState() {\n const elementListInView = [];\n for (let i = 0, max = this.contents.length; i < max; i++) {\n const current = this.contents[i];\n if (current && this.isView(current)) {\n elementListInView.push(current);\n }\n }\n\n return elementListInView;\n }\n\n isView(element) {\n const scrollTop = this.scrollElement.scrollTop;\n const subHeaderRect = document.querySelector(\".mdl-layout__header-row\").getBoundingClientRect();\n const headerHeight = subHeaderRect.top + subHeaderRect.height;\n const scrollBottom = scrollTop + window.innerHeight - headerHeight;\n const rect = element.getBoundingClientRect();\n const elementTop = rect.top + scrollTop;\n const elementBottom = elementTop + element.offsetHeight;\n\n return elementTop < scrollBottom - 30 && elementBottom > scrollTop + headerHeight + 30;\n }\n\n toggleNavClass(elements) {\n if (window.onclickToc) {\n window.onclickToc = false;\n return;\n }\n let maxDepth = 0;\n let maxDepthElement = $();\n\n for (let i = 0, max = elements.length; i < max; i++) {\n const el = elements[i];\n const tempDepth = this.getTagDepth(el);\n if (maxDepth < tempDepth) {\n maxDepth = tempDepth;\n maxDepthElement = el;\n }\n }\n\n for (let i = 0, max = this.nav.length; i < max; i++) {\n const navElement = this.nav[i];\n if (navElement.href.split('#')[1] === maxDepthElement.id) {\n navElement.classList.add(this.className);\n navElement.classList.add('mdl-color-text--primary');\n } else {\n navElement.classList.remove(this.className);\n navElement.classList.remove('mdl-color-text--primary');\n }\n }\n }\n\n getTagDepth(element) {\n return parseInt($(element).find('h1,h2,h3,h4,h5,h6').get(0).tagName.split('H')[1]);\n }\n}\n","import \"../scss/sphinx_materialdesign_theme.scss\";\r\nimport \"./feedback\";\r\nimport \"material-design-lite\";\r\nimport \"babel-polyfill\";\r\nimport ScrollSpy from \"./scrollspy\";\r\n\r\n$(function() {\r\n\r\n function reconstructionDrawerGlobalToc() {\r\n const $globaltoc = $('.mdl-layout__drawer nav');\r\n const $lists = $globaltoc.find('li');\r\n $.each($lists, function(index, li) {\r\n const $li = $(li);\r\n const $linkWrapper = $('');\r\n const $link = $li.children('a');\r\n $li.append($linkWrapper.append($link));\r\n\r\n const isCurrent = $li.hasClass('current') && !$link.hasClass('current');\r\n const $ul = $li.children('ul');\r\n if ($ul.length) {\r\n const ulId = `globalnav-${index}`;\r\n $ul.attr('id', ulId);\r\n $ul.addClass('collapse');\r\n const $toggleWrapper = $('');\r\n if (isCurrent) {\r\n $ul.addClass('show');\r\n $toggleWrapper.addClass('show');\r\n } else {\r\n $ul.hide();\r\n }\r\n\r\n $li.append(\r\n $linkWrapper.append(\r\n $toggleWrapper.append(\r\n $(`keyboard_arrow_down`)\r\n )\r\n )\r\n ).append($ul);\r\n }\r\n });\r\n }\r\n\r\n function collapse() {\r\n $('.mdl-layout__drawer nav .nav-toggle a').click(function() {\r\n const $toggle = $(this);\r\n const id = $toggle.attr('data-toggle');\r\n $(`ul${id}`).toggleClass('show').animate({height: \"toggle\", opacity: \"toggle\"});\r\n $toggle.parent().toggleClass('show');\r\n });\r\n }\r\n\r\n function styleMdlCodeBlock() {\r\n $('pre').hover(function() {\r\n $(this).attr('click-to-copy', 'click to copy...');\r\n });\r\n $('pre').click(function(){\r\n var result = copyClipboard(this);\r\n if (result) {\r\n $(this).attr('click-to-copy', 'copied!');\r\n }\r\n });\r\n }\r\n\r\n function copyClipboard(selector) {\r\n var body = document.body;\r\n if(!body) return false;\r\n\r\n var $target = $(selector);\r\n if ($target.length === 0) { return false; }\r\n\r\n var text = $target.text();\r\n var textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n var result = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n return result;\r\n }\r\n\r\n function quickSearchClickEvent() {\r\n const $breadcrumb = $('.breadcrumb');\r\n\r\n $('#waterfall-exp').focus(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.hide();\r\n }\r\n }).blur(() => {\r\n if ($(window).width() <= 1024) {\r\n $breadcrumb.show();\r\n }\r\n });\r\n }\r\n\r\n // styleMdlCodeBlock();\r\n\r\n reconstructionDrawerGlobalToc();\r\n collapse();\r\n quickSearchClickEvent();\r\n\r\n\r\n const spy = new ScrollSpy({\r\n contentSelector: '.page-content .section',\r\n navSelector: '.localtoc a',\r\n scrollSelector: 'main' ,\r\n className: 'current',\r\n offsetTop: 64});\r\n\r\n $('.mdl-layout__content').focus();\r\n\r\n $('.mx-card').each(function(){\r\n $(this).addClass('mdl-card mdl-shadow--2dp');\r\n });\r\n $('.mx-card .mx-card-title').each(function(){\r\n $(this).addClass('mdl-card__title');\r\n });\r\n $('.mx-card .mx-card-text').each(function(){\r\n $(this).addClass('mdl-card__supporting-text');\r\n });\r\n $('.mx-card-link').each(function(){\r\n $(this).hide();\r\n });\r\n $('.mdl-card').each(function(){\r\n $(this).click(function() {\r\n var url = $(this).find('.mx-card-link').text();\r\n if (url) {\r\n window.location = url;\r\n }\r\n return true;\r\n });\r\n });\r\n\r\n $('a.download').each(function() {\r\n // button\r\n var button = document.createElement('button');\r\n button.className = 'download mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect';\r\n\r\n // icon\r\n var icon = document.createElement('i');\r\n icon.className = 'material-icons';\r\n var text = document.createTextNode('file_download');\r\n icon.appendChild(text);\r\n button.appendChild(icon);\r\n\r\n // link\r\n var link = $(this).attr('href');\r\n button.onclick = function() {\r\n window.location = link;\r\n };\r\n var fileName = link.split(\"/\").slice(-1).pop();\r\n if (fileName) {\r\n button.id = fileName.replace('.', '-');\r\n } else {\r\n button.id = 'download-button-' + $(this).index();\r\n }\r\n\r\n // hint\r\n var hint = document.createElement('div');\r\n hint.className = 'mdl-tooltip';\r\n hint.setAttribute('data-mdl-for', button.id);\r\n var hintText = $(this).find('span.pre').map(function() {\r\n return $(this).text();\r\n }).get().join(' ');\r\n hint.innerHTML = hintText;\r\n\r\n componentHandler.upgradeElement(button);\r\n $(this).remove();\r\n var header = $('.section h1').first();\r\n header.append(button);\r\n header.append(hint);\r\n });\r\n\r\n $('.mdl-layout').css('visibility', 'visible');\r\n\r\n const addScrollAwareHeaderAnimation = function() {\r\n let preScrollTop, curScrollTop = 0;\r\n const scrollContent = $(\"main.mdl-layout__content\");\r\n scrollContent.focus();\r\n const navBar = $('header.mdl-layout__header');\r\n const navBarHeight = navBar.height();\r\n \r\n scrollContent.scroll(function () {\r\n curScrollTop = scrollContent.scrollTop();\r\n if (preScrollTop < curScrollTop && curScrollTop > navBarHeight) {\r\n navBar.addClass(\"scrollUp\");\r\n } else if (preScrollTop > curScrollTop && !(curScrollTop <= navBarHeight)) {\r\n navBar.removeClass(\"scrollUp\");\r\n }\r\n preScrollTop = curScrollTop;\r\n });\r\n }\r\n addScrollAwareHeaderAnimation();\r\n});\r\n"]} \ No newline at end of file diff --git a/plugin/caffe/caffe_stream.cc b/docs/python_docs/themes/mx-theme/src/js/feedback.js similarity index 62% rename from plugin/caffe/caffe_stream.cc rename to docs/python_docs/themes/mx-theme/src/js/feedback.js index 823948a8aa2f..f45423765b74 100644 --- a/plugin/caffe/caffe_stream.cc +++ b/docs/python_docs/themes/mx-theme/src/js/feedback.js @@ -1,4 +1,4 @@ -/* +/*! * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -17,21 +17,17 @@ * under the License. */ -/*! - * Copyright (c) 2016 by Contributors - * \file caffe_stream.cc - * \brief define stream opertors >> and << - * \author Haoran Wang -*/ -#include"caffe_stream.h" - -namespace dmlc { -namespace parameter { - std::istringstream &operator>>(std::istringstream &is, ::caffe::LayerParameter ¶_) { - return is; - } - std::ostream &operator<<(std::ostream &os, ::caffe::LayerParameter ¶_) { - return os; - } -} -} +$(document).ready(function() { + $(".feedback-answer").on("click", function () { + $(".feedback-question").remove(); + $(".feedback-answer-container").remove(); + $(".feedback-thank-you").show(); + ga("send", { + hitType: "event", + eventCategory: "Did this page help you?", + eventAction: $(this).attr("data-response"), + eventLabel: window.location.pathname || "unknown", + eventValue: $(this).attr("data-response") === "yes" ? 1 : 0 + }); + }); +}); diff --git a/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js b/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js index 5f14255205f4..75d2f9160455 100644 --- a/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js +++ b/docs/python_docs/themes/mx-theme/src/js/sphinx_materialdesign_theme.js @@ -1,8 +1,8 @@ import "../scss/sphinx_materialdesign_theme.scss"; +import "./feedback"; import "material-design-lite"; import "babel-polyfill"; import ScrollSpy from "./scrollspy"; -import AdjustHeight from "./adjust-height"; $(function() { @@ -172,4 +172,22 @@ $(function() { $('.mdl-layout').css('visibility', 'visible'); + const addScrollAwareHeaderAnimation = function() { + let preScrollTop, curScrollTop = 0; + const scrollContent = $("main.mdl-layout__content"); + scrollContent.focus(); + const navBar = $('header.mdl-layout__header'); + const navBarHeight = navBar.height(); + + scrollContent.scroll(function () { + curScrollTop = scrollContent.scrollTop(); + if (preScrollTop < curScrollTop && curScrollTop > navBarHeight) { + navBar.addClass("scrollUp"); + } else if (preScrollTop > curScrollTop && !(curScrollTop <= navBarHeight)) { + navBar.removeClass("scrollUp"); + } + preScrollTop = curScrollTop; + }); + } + addScrollAwareHeaderAnimation(); }); diff --git a/docs/python_docs/themes/mx-theme/src/scss/_root.scss b/docs/python_docs/themes/mx-theme/src/scss/_root.scss index f805a8fb8f0e..b1954a5b4613 100644 --- a/docs/python_docs/themes/mx-theme/src/scss/_root.scss +++ b/docs/python_docs/themes/mx-theme/src/scss/_root.scss @@ -14,6 +14,28 @@ body { outline: none; } +.mdl-layout__content header.mdl-layout__drawer { + display: none; +} + +.mdl-layout__container { + height: calc(100% - 76px); + margin-top: 76px; +} +.mdl-layout__header { + position: fixed; + transition: transform 0.5s; +} +.mdl-layout--fixed-drawer>.mdl-layout__content { + margin-left: 300px; +} + +@media screen and (max-width: 1024px) { + .mdl-layout--fixed-drawer>.mdl-layout__content { + margin-left:0 + } +} + h1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title, a.download > code.download { font-family: $body_font_family; diff --git a/docs/python_docs/themes/mx-theme/src/scss/grid/_simplegrid.scss b/docs/python_docs/themes/mx-theme/src/scss/grid/_simplegrid.scss index c4155950c031..c99c05639c6f 100644 --- a/docs/python_docs/themes/mx-theme/src/scss/grid/_simplegrid.scss +++ b/docs/python_docs/themes/mx-theme/src/scss/grid/_simplegrid.scss @@ -59,15 +59,6 @@ $breakpoint-large: 60em; // 960px width: 100%; margin-left: auto; margin-right: auto; - - @media only screen and (min-width: $breakpoint-small) { - width: 80%; - } - - @media only screen and (min-width: $breakpoint-large) { - width: 75%; - max-width: 60rem; - } } .row { diff --git a/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss b/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss index 2654a2c1e72c..be12d9406b16 100644 --- a/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss +++ b/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss @@ -4,7 +4,7 @@ $layout: ( document: ( xl: ( - width: 1400px, + width: 100%, ) ), drawer-container: ( @@ -25,14 +25,9 @@ ) ); -.mdl-layout { - margin-top: 76px; -} - - .document { width: 100%; - margin: 0 auto; + margin: 84px auto; display: flex; @media (min-width: $xl-breakpoint) { @@ -65,6 +60,7 @@ overflow-x: auto; overflow-y: auto; width: inherit; + right: 0px; &::-webkit-scrollbar { width: 6px; } diff --git a/docs/static_site/src/.htaccess b/docs/static_site/src/.htaccess index 2cf7300946be..679b613b7581 100644 --- a/docs/static_site/src/.htaccess +++ b/docs/static_site/src/.htaccess @@ -22,14 +22,12 @@ RewriteOptions AllowNoSlash -# TODO temporary fix for issue #18604 -Redirect 302 /api/r/docs/api/R-package/build/mxnet-r-reference-manual.pdf https://mxnet-public.s3.us-east-2.amazonaws.com/docs/v1.x/mxnet-r-reference-manual.pdf -Redirect 302 /api/scala/docs/api/ /versions/1.6/api/scala/docs/api/ -Redirect 302 /api/java/docs/api/ /versions/1.6/api/java/docs/api/ -Redirect 302 /api/clojure/docs/api/ /versions/1.6/api/clojure/docs/api/ -Redirect 302 /api/cpp/docs/api/ /versions/1.6/api/cpp/docs/api/ -Redirect 302 /api/julia/docs/api/ /versions/1.6/api/julia/docs/api/ -Redirect 302 /api/julia/docs/api/#tutorials /versions/1.6/api/julia/docs/api/#tutorials +# Set default website version to current stable (v1.6) +RewriteCond %{REQUEST_URI} !^/versions/ +RewriteCond %{HTTP_REFERER} !mxnet.apache.org +RewriteCond %{HTTP_REFERER} !mxnet.incubator.apache.org +RewriteCond %{HTTP_REFERER} !mxnet.cdn.apache.org +RewriteRule ^(.*)$ /versions/1.6/$1 [r=307,L] # Redirect Chinese visitors to Chinese CDN, temporary solution for slow site speed in China RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CN$ diff --git a/docs/static_site/src/_sass/minima/_docs.scss b/docs/static_site/src/_sass/minima/_docs.scss index f628740862ae..85e4c12c081e 100644 --- a/docs/static_site/src/_sass/minima/_docs.scss +++ b/docs/static_site/src/_sass/minima/_docs.scss @@ -85,3 +85,13 @@ padding-top: 20px; padding-bottom: 20px; } + +.language-binding-banner { + border: 1px solid transparent; + border-radius: .25rem; + color: #856404; + padding: .75rem 1.25rem; + margin-bottom: 1rem; + background-color: #fff3cd; + border-color: #ffeeba; +} diff --git a/docs/static_site/src/assets/js/copycode.js b/docs/static_site/src/assets/js/copycode.js index 75c6483369e0..6bda2f293973 100644 --- a/docs/static_site/src/assets/js/copycode.js +++ b/docs/static_site/src/assets/js/copycode.js @@ -59,7 +59,7 @@ $(document).ready(function () { const cleanPrompt = function (line, prompts) { let res = line; for (let i = 0; i < prompts.length; i++) { - let reg = new RegExp("(?<=^\\s*)" + prompts[i]); + let reg = new RegExp("(?:^\\s*)" + prompts[i]); if (reg.test(res)) { res = res.replace(reg, ""); break; diff --git a/docs/static_site/src/pages/api/api.html b/docs/static_site/src/pages/api/api.html index b055072c40c4..bd0d8bfaa510 100644 --- a/docs/static_site/src/pages/api/api.html +++ b/docs/static_site/src/pages/api/api.html @@ -21,55 +21,6 @@ tutorial_link: /api/python/docs/tutorials icon: /assets/img/python_logo.svg tag: python -- title: Scala - guide_link: /api/scala.html - api_link: /api/scala/docs/api - tutorial_link: /api/scala/docs/tutorials - description: - icon: /assets/img/scala_logo.svg - tag: scala -- title: Java - guide_link: /api/java.html - api_link: /api/java/docs/api - tutorial_link: /api/java/docs/tutorials - description: - icon: /assets/img/java_logo.svg - tag: java -- title: Clojure - guide_link: /api/clojure - api_link: /api/clojure/docs/api - tutorial_link: /api/clojure/docs/tutorials - description: - icon: /assets/img/clojure_logo.svg - tag: clojure -- title: C/C++ - guide_link: /api/cpp - api_link: /api/cpp/docs/api - tutorial_link: /api/cpp/docs/tutorials - description: - icon: /assets/img/cpp_logo.svg - tag: cpp -- title: Julia - guide_link: /api/julia - api_link: /api/julia/docs/api - tutorial_link: /api/julia/docs/api/#tutorials - description: - icon: /assets/img/julia_logo.svg - tag: julia -- title: R - guide_link: /api/r - api_link: /api/r/docs/api/R-package/build/mxnet-r-reference-manual.pdf - tutorial_link: /api/r/docs/tutorials - description: - icon: /assets/img/R_logo.svg - tag: r -- title: Perl - guide_link: /api/perl - api_link: https://metacpan.org/release/AI-MXNet - tutorial_link: /api/perl/docs/tutorials - description: - icon: /assets/img/perl_logo.svg - tag: perl --- @@ -123,26 +74,11 @@

Python-first API

{%- endfor -%}

Other Bindings

-{%- for doc in page.docs -%} - {%- if doc.tag != 'python' -%} -
- +
+

Call for Contribution

+ The Clojure, Java, Julia, R, and Scala language bindings of MXNet v1.x were removed in v2.x due to some C APIs being deprecated and the bindings rely on the deprecated APIs. You can still use these language bindings in v1.x. + MXNet's new C APIs in v2.x can be used to reestablish your preferred language binding. Your contribution is welcome!
- {%- endif -%} -{%- endfor -%}
diff --git a/docs/static_site/src/pages/api/faq/caffe.md b/docs/static_site/src/pages/api/faq/caffe.md deleted file mode 100644 index ba84b8b590be..000000000000 --- a/docs/static_site/src/pages/api/faq/caffe.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -layout: page_category -title: Convert from Caffe to MXNet -category: faq -faq_c: Deployment Environments -question: How to convert a Caffe model to MXNet? -permalink: /api/faq/caffe ---- - - - - - - - - - - - - - - - - -# How to | Convert from Caffe to MXNet - -Key topics covered include the following: - -- [Calling Caffe operators in MXNet](#calling-caffe-operators-in-mxnet) - -## Calling Caffe operators in MXNet - -MXNet supports calling most Caffe operators, -including network layer, data layer, and loss function, directly. It is -particularly useful if there are customized operators implemented in Caffe, then -we do not need to re-implement them in MXNet. - -### How to install - -This feature requires Caffe. In particular, we need to re-compile Caffe before -[PR #4527](https://github.com/BVLC/caffe/pull/4527) is merged into Caffe. There -are the steps of how to rebuild Caffe: - -1. Download [Caffe](https://github.com/BVLC/caffe). E.g. `git clone - https://github.com/BVLC/caffe` -2. Download the - [patch for the MXNet interface](https://github.com/BVLC/caffe/pull/4527.patch) - and apply to Caffe. E.g. - ```bash - cd caffe && wget https://github.com/BVLC/caffe/pull/4527.patch && git apply 4527.patch - ``` -3. Build and install Caffe by following the - [official guide](https://caffe.berkeleyvision.org/installation.html). - -Next we need to compile MXNet with Caffe supports - -1. Copy `make/config.mk` (for Linux) or `make/osx.mk` - (for Mac) into the MXNet root folder as `config.mk` if you have not done it yet -2. Open the copied `config.mk` and uncomment these two lines - ```bash - CAFFE_PATH = $(HOME)/caffe - MXNET_PLUGINS += plugin/caffe/caffe.mk - ``` - Modify `CAFFE_PATH` to your Caffe installation, if necessary. -3. Then build with 8 threads `make clean && make -j8`. - -### How to use - -This Caffe plugin adds three components into MXNet: - -- `sym.CaffeOp` : Caffe neural network layer -- `sym.CaffeLoss` : Caffe loss functions -- `io.CaffeDataIter` : Caffe data layer - -#### Use `sym.CaffeOp` -The following example shows the definition of a 10 classes multi-layer perceptron: - -```Python -data = mx.sym.Variable('data') -fc1 = mx.sym.CaffeOp(data_0=data, num_weight=2, name='fc1', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 128} }") -act1 = mx.sym.CaffeOp(data_0=fc1, prototxt="layer{type:\"TanH\"}") -fc2 = mx.sym.CaffeOp(data_0=act1, num_weight=2, name='fc2', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 64} }") -act2 = mx.sym.CaffeOp(data_0=fc2, prototxt="layer{type:\"TanH\"}") -fc3 = mx.sym.CaffeOp(data_0=act2, num_weight=2, name='fc3', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 10}}") -``` - -Let's break it down. First, `data = mx.sym.Variable('data')` defines a variable -as a placeholder for input. Then, it's fed through Caffe operators with `fc1 = -mx.sym.CaffeOp(...)`. `CaffeOp` accepts several arguments: - -- The inputs to Caffe operators are named as `data_i` for *i=0, ..., num_data-1* -- `num_data` is the number of inputs. In default it is 1, and therefore -skipped in the above example. -- `num_out` is the number of outputs. In default it is 1 and also skipped. -- `num_weight` is the number of weights (`blobs_`). Its default value is 0. We -need to explicitly specify it for a non-zero value. -- `prototxt` is the protobuf configuration string. - -#### Use `sym.CaffeLoss` - -Using Caffe loss is similar. -We can replace the MXNet loss with Caffe loss. -We can replace - -Replacing the last line of the above example with the following two lines we can -call Caffe loss instead of MXNet loss. - -```Python -label = mx.sym.Variable('softmax_label') -mlp = mx.sym.CaffeLoss(data=fc3, label=label, grad_scale=1, name='softmax', prototxt="layer{type:\"SoftmaxWithLoss\"}") -``` - -Similar to `CaffeOp`, `CaffeLoss` has arguments `num_data` (2 in default) and -`num_out` (1 in default). But there are two differences - -1. Inputs are `data` and `label`. And we need to explicitly create a variable - placeholder for label, which is implicitly done in MXNet loss. -2. `grad_scale` is the weight of this loss. - -#### Use `io.CaffeDataIter` - -We can also wrap a Caffe data layer into MXNet's data iterator. Below is an -example for creating a data iterator for MNIST - -```python -train = mx.io.CaffeDataIter( - prototxt = - 'layer { \ - name: "mnist" \ - type: "Data" \ - top: "data" \ - top: "label" \ - include { \ - phase: TEST \ - } \ - transform_param { \ - scale: 0.00390625 \ - } \ - data_param { \ - source: "caffe/examples/mnist/mnist_test_lmdb" \ - batch_size: 100 \ - backend: LMDB \ - } \ - }', - flat = flat, - num_examples = 60000, -) -``` diff --git a/example/extensions/lib_custom_op/gemm_lib.cc b/example/extensions/lib_custom_op/gemm_lib.cc index 4f8dabadc6a1..764ac49d9942 100644 --- a/example/extensions/lib_custom_op/gemm_lib.cc +++ b/example/extensions/lib_custom_op/gemm_lib.cc @@ -24,6 +24,7 @@ */ #include +#include #include "lib_api.h" // main matrix multiplication routine @@ -179,23 +180,23 @@ REGISTER_OP(my_gemm) class MyStatefulGemm : public CustomStatefulOp { public: explicit MyStatefulGemm(int count, - const std::unordered_map& attrs) - : count(count), attrs_(attrs) {} + std::unordered_map attrs) + : count(count), attrs_(std::move(attrs)) {} MXReturnValue Forward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { std::cout << "Info: keyword + number of forward: " << ++count << std::endl; return forward(attrs_, inputs, outputs, op_res); } MXReturnValue Backward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { return backward(attrs_, inputs, outputs, op_res); } - ~MyStatefulGemm() {} + ~MyStatefulGemm() = default; private: int count; diff --git a/example/extensions/lib_custom_op/transposecsr_lib.cc b/example/extensions/lib_custom_op/transposecsr_lib.cc index 224cd6aa81b6..fc80751e47be 100644 --- a/example/extensions/lib_custom_op/transposecsr_lib.cc +++ b/example/extensions/lib_custom_op/transposecsr_lib.cc @@ -24,6 +24,7 @@ */ #include +#include #include "lib_api.h" void transpose(MXTensor& src, MXTensor& dst, const OpResource& res) { @@ -151,19 +152,19 @@ REGISTER_OP(my_transposecsr) class MyStatefulTransposeCSR : public CustomStatefulOp { public: explicit MyStatefulTransposeCSR(int count, - const std::unordered_map& attrs) - : count(count), attrs_(attrs) {} + std::unordered_map attrs) + : count(count), attrs_(std::move(attrs)) {} MXReturnValue Forward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { std::cout << "Info: keyword + number of forward: " << ++count << std::endl; return forward(attrs_, inputs, outputs, op_res); } MXReturnValue Backward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { return backward(attrs_, inputs, outputs, op_res); } diff --git a/example/extensions/lib_custom_op/transposerowsp_lib.cc b/example/extensions/lib_custom_op/transposerowsp_lib.cc index 46d3c4d41a4c..5b6f0f394dc9 100644 --- a/example/extensions/lib_custom_op/transposerowsp_lib.cc +++ b/example/extensions/lib_custom_op/transposerowsp_lib.cc @@ -24,6 +24,7 @@ */ #include +#include #include "lib_api.h" void transpose(MXTensor& src, MXTensor& dst, const OpResource& res) { @@ -153,19 +154,19 @@ REGISTER_OP(my_transposerowsp) class MyStatefulTransposeRowSP : public CustomStatefulOp { public: explicit MyStatefulTransposeRowSP(int count, - const std::unordered_map& attrs) - : count(count), attrs_(attrs) {} + std::unordered_map attrs) + : count(count), attrs_(std::move(attrs)) {} MXReturnValue Forward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { std::cout << "Info: keyword + number of forward: " << ++count << std::endl; return forward(attrs_, inputs, outputs, op_res); } MXReturnValue Backward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { return backward(attrs_, inputs, outputs, op_res); } diff --git a/example/extensions/lib_pass/pass_lib.cc b/example/extensions/lib_pass/pass_lib.cc index bbdcd73a7a0b..ca77b59bfa06 100644 --- a/example/extensions/lib_pass/pass_lib.cc +++ b/example/extensions/lib_pass/pass_lib.cc @@ -23,7 +23,7 @@ * \brief subgraph operator implementation library file */ -#include +#include #include #include #include "lib_api.h" @@ -67,8 +67,7 @@ MXReturnValue jsonPass(const std::string& in_graph, const std::string** out_grap JsonVal nodes = json_val.map[JsonVal("nodes")]; // loop over nodes - for(int i=0; i +#include #include #include +#include #include "lib_api.h" /* function to execute log operator on floats */ @@ -69,8 +70,7 @@ MXReturnValue myExecutor(std::vector* inputs, std::vector to_free; // loop over nodes - for(int i=0; i* inputs, // get input tensor based on node ID inputs from data storage MXTensor &input = data[node_inputs.list[0].list[0].num]; // create temporary storage - MXTensor tmp(malloc(input.size()*4), input.shape, input.dtype, 0, MXContext::CPU(0), kDefaultStorage); + MXTensor tmp(malloc(input.size()*4), input.shape, input.dtype, 0, MXContext::CPU(0), kDefaultStorage); // NOLINT // save allocated ptr to free later to_free.push_back(tmp.data_ptr); // execute log operator @@ -95,7 +95,7 @@ MXReturnValue myExecutor(std::vector* inputs, // get input tensor based on node ID inputs from data storage MXTensor &input = data[node_inputs.list[0].list[0].num]; // create temporary storage - MXTensor tmp(malloc(input.size()*4), input.shape, input.dtype, 0, MXContext::CPU(0), kDefaultStorage); + MXTensor tmp(malloc(input.size()*4), input.shape, input.dtype, 0, MXContext::CPU(0), kDefaultStorage); // NOLINT // save allocated ptr to free later to_free.push_back(tmp.data_ptr); // execute exp operator @@ -106,7 +106,7 @@ MXReturnValue myExecutor(std::vector* inputs, std::cout << "Error! Unsupported op '" << op << "' found in myExecutor"; // free allocated temporary storage for (void* ptr : to_free) - free(ptr); + free(ptr); // NOLINT return MX_FAIL; } } @@ -129,7 +129,7 @@ MXReturnValue myExecutor(std::vector* inputs, // free allocated temporary storage for (void* ptr : to_free) { - free(ptr); + free(ptr); // NOLINT } return MX_SUCCESS; @@ -137,9 +137,9 @@ MXReturnValue myExecutor(std::vector* inputs, class MyStatefulOp : public CustomStatefulOp { public: - explicit MyStatefulOp(const std::string& sym, + explicit MyStatefulOp(std::string sym, const std::unordered_map& attrs) - : subgraph_sym(sym), attrs_(attrs) { + : subgraph_sym(std::move(sym)), attrs_(attrs) { for (auto kv : attrs) { std::cout << "subgraphOp attributes: " << kv.first << " ==> " << kv.second << std::endl; } @@ -147,7 +147,7 @@ class MyStatefulOp : public CustomStatefulOp { MXReturnValue Forward(std::vector* inputs, std::vector* outputs, - const OpResource& op_res) { + const OpResource& op_res) override { return myExecutor(inputs, outputs, subgraph_sym); } @@ -299,20 +299,20 @@ class MySelector : public CustomOpSelector { } return false; } - virtual bool Select(int nodeID) { + bool Select(int nodeID) override { return chooseNode(nodeID); } - virtual bool SelectInput(int nodeID, int input_nodeID) { + bool SelectInput(int nodeID, int input_nodeID) override { return chooseNode(input_nodeID); } - virtual bool SelectOutput(int nodeID, int output_nodeID) { + bool SelectOutput(int nodeID, int output_nodeID) override { return chooseNode(output_nodeID); } virtual void Filter(std::vector& candidates, std::vector& keep) { keep.insert(keep.end(), candidates.begin(), candidates.end()); } - virtual void Reset() {} + void Reset() override {} private: std::string graph_json; JsonVal nodes; diff --git a/include/mxnet/c_api.h b/include/mxnet/c_api.h index 04d863991b48..2aa00861ff32 100644 --- a/include/mxnet/c_api.h +++ b/include/mxnet/c_api.h @@ -252,6 +252,12 @@ MXNET_DLL int MXLoadLib(const char *path, unsigned verbose); */ MXNET_DLL int MXLibInfoFeatures(const struct LibFeature **libFeature, size_t *size); +/*! + * \brief return whether the mxnet library is compiled with cxx11 abi + * \return whether mxnet is built with cxx11 abi + */ +MXNET_DLL int MXLibInfoCompiledWithCXX11ABI(bool* result); + /*! * \brief Seed all global random number generators in mxnet. * \param seed the random number seed. diff --git a/include/mxnet/c_api_test.h b/include/mxnet/c_api_test.h index b7ba0cef04a3..df7079842657 100644 --- a/include/mxnet/c_api_test.h +++ b/include/mxnet/c_api_test.h @@ -75,6 +75,22 @@ MXNET_DLL int MXRemoveSubgraphPropertyOpNames(const char* prop_name); MXNET_DLL int MXRemoveSubgraphPropertyOpNamesV2(const char* prop_name); +/*! + * \brief Get the value of an environment variable as seen by the backend. + * \param name The name of the environment variable + * \param value The returned value of the environment variable + */ +MXNET_DLL int MXGetEnv(const char* name, + const char** value); + +/*! + * \brief Set the value of an environment variable from the backend. + * \param name The name of the environment variable + * \param value The desired value to set the environment variable `name` + */ +MXNET_DLL int MXSetEnv(const char* name, + const char* value); + #ifdef __cplusplus } #endif // __cplusplus diff --git a/include/mxnet/libinfo.h b/include/mxnet/libinfo.h index ade1c731afcf..b1098b002dd7 100644 --- a/include/mxnet/libinfo.h +++ b/include/mxnet/libinfo.h @@ -115,10 +115,6 @@ #define MXNET_USE_F16C MSHADOW_USE_F16C #endif -#ifndef MXNET_USE_CAFFE -#define MXNET_USE_CAFFE 0 -#endif - #ifndef MXNET_USE_DIST_KVSTORE #define MXNET_USE_DIST_KVSTORE 0 #endif @@ -135,6 +131,12 @@ #define MXNET_USE_TVM_OP 0 #endif +#ifndef _GLIBCXX_USE_CXX11_ABI +#define MXNET_GLIBCXX_USE_CXX11_ABI 0 +#else +#define MXNET_GLIBCXX_USE_CXX11_ABI _GLIBCXX_USE_CXX11_ABI +#endif + namespace mxnet { namespace features { // Check compile flags such as CMakeLists.txt @@ -183,9 +185,7 @@ enum : unsigned { OPENCV, // Misc - CAFFE, DIST_KVSTORE, - CXX14, INT64_TENSOR_SIZE, // Signal handler to print stack traces on exceptions @@ -210,6 +210,7 @@ struct LibInfo { const std::array& getFeatures() { return m_lib_features; } + bool cxx11_abi(); private: std::array m_lib_features; static std::unique_ptr m_inst; diff --git a/plugin/caffe/README.md b/plugin/caffe/README.md deleted file mode 100644 index 7e60f2e83564..000000000000 --- a/plugin/caffe/README.md +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - -# How to use Caffe operator in MXNet - -[Caffe](http://caffe.berkeleyvision.org/) has been a well-known and widely-used deep learning framework. Now MXNet has supported calling most caffe operators(layers) and loss functions directly in its symbolic graph! Using one's own customized caffe layer is also effortless. - -Besides Caffe, MXNet has already embedded Torch modules and its tensor mathematical functions. ([link](https://github.com/dmlc/mxnet/blob/master/docs/faq/torch.md)) - -This blog demonstrates two steps to use Caffe op in MXNet: - -* How to install MXNet with Caffe support. - -* How to embed Caffe op into MXNet's symbolic graph. - -## Install Caffe With MXNet interface -* Download offical Caffe repository [BVLC/Caffe](https://github.com/BVLC/caffe). -* Download [caffe patch for mxnet interface] (https://github.com/BVLC/caffe/pull/4527.patch). Move patch file under your caffe root folder and apply the patch by `git apply patch_file_name`. -* Install caffe following [official guide](http://caffe.berkeleyvision.org/installation.html). - -## Compile with Caffe -* In mxnet folder, open `config.mk` (if you haven't already, copy `make/config.mk` (Linux) or `make/osx.mk` (Mac) into MXNet root folder as `config.mk`) and uncomment the lines `CAFFE_PATH = $(HOME)/caffe` and `MXNET_PLUGINS += plugin/caffe/caffe.mk`. Modify `CAFFE_PATH` to your caffe installation if necessary. -* Run `make clean && make` to build with caffe support. - -## Caffe Operator (Layer) -Caffe's neural network operator and loss functions are supported by MXNet through `mxnet.symbol.CaffeOp` and `mxnet.symbol.CaffeLoss` respectively. -For example, the following code shows multi-layer perception network for classifying MNIST digits ([full code](https://github.com/dmlc/mxnet/blob/master/example/caffe/caffe_net.py)): - -### Python -```Python -data = mx.symbol.Variable('data') -label = mx.symbol.Variable('softmax_label') -fc1 = mx.symbol.CaffeOp(data_0=data, num_weight=2, name='fc1', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 128} }") -act1 = mx.symbol.CaffeOp(data_0=fc1, prototxt="layer{type:\"TanH\"}") -fc2 = mx.symbol.CaffeOp(data_0=act1, num_weight=2, name='fc2', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 64} }") -act2 = mx.symbol.CaffeOp(data_0=fc2, prototxt="layer{type:\"TanH\"}") -fc3 = mx.symbol.CaffeOp(data_0=act2, num_weight=2, name='fc3', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 10}}") -mlp = mx.symbol.CaffeLoss(data=fc3, label=label, grad_scale=1, name='softmax', prototxt="layer{type:\"SoftmaxWithLoss\"}") -``` - -Let's break it down. First `data = mx.symbol.Variable('data')` defines a variable as placeholder for input. -Then it's fed through Caffe operators with `fc1 = mx.symbol.CaffeOp(data_0=data, num_weight=2, name='fc1', prototxt="layer{type:\"InnerProduct\" inner_product_param{num_output: 128} }")`. - -The inputs to caffe op are named as data_i for i=0 ... num_data-1 as `num_data` is the number of inputs. You may skip the argument, as the example does, if its value is 1. While `num_weight` is number of `blobs_`(weights). Its default value is 0, as many ops maintain no weight. `prototxt` is the configuration string. diff --git a/plugin/caffe/caffe.mk b/plugin/caffe/caffe.mk deleted file mode 100644 index c115e473be9d..000000000000 --- a/plugin/caffe/caffe.mk +++ /dev/null @@ -1,32 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -CFLAGS += -I$(CAFFE_PATH)/include -I$(CAFFE_PATH)/build/src -I$(CAFFE_PATH)/build/include -LDFLAGS += -lprotobuf -lboost_system -lboost_thread -lboost_filesystem -lgflags -lglog -L$(CAFFE_PATH)/build/lib -lcaffe - -ifeq ($(USE_CUDNN), 1) - CFLAGS += -DUSE_CUDNN=1 -endif - -ifeq ($(USE_CUDA), 0) - CFLAGS += -DCPU_ONLY=1 -endif - -CAFFE_SRC = $(wildcard plugin/caffe/*.cc) -PLUGIN_OBJ += $(patsubst %.cc, build/%.o, $(CAFFE_SRC)) -CAFFE_CUSRC = $(wildcard plugin/caffe/*.cu) -PLUGIN_CUOBJ += $(patsubst %.cu, build/%_gpu.o, $(CAFFE_CUSRC)) diff --git a/plugin/caffe/caffe_blob.cc b/plugin/caffe/caffe_blob.cc deleted file mode 100644 index 6a75439f3e4e..000000000000 --- a/plugin/caffe/caffe_blob.cc +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_blob.cc - * \brief Implementations of SetDataGradToBlob given various device/dimension - * \author Haoran Wang -*/ -#include "caffe_blob.h" -namespace mxnet { -namespace op { -namespace caffe { - -template<> -void SetDataGradToBlob(caffeMemoryTypes memType, - std::vector<::caffe::Blob*>::iterator blob, - std::vector::const_iterator itr) { - float *data_ptr = reinterpret_cast((*itr).dptr_); - if (memType == Data) - (*blob)->set_cpu_data(data_ptr); - else - MXCAFFEBLOB(*blob, float)->set_cpu_diff(data_ptr); -} - -template<> -void SetDataGradToBlob(caffeMemoryTypes memType, - std::vector<::caffe::Blob*>::iterator blob, - std::vector::const_iterator itr) { - double *data_ptr = reinterpret_cast((*itr).dptr_); - if (memType == Data) - (*blob)->set_cpu_data(data_ptr); - else - MXCAFFEBLOB(*blob, double)->set_cpu_diff(data_ptr); -} - -template<> -void SetDataGradToBlob(caffeMemoryTypes memType, - std::vector<::caffe::Blob*>::iterator blob, - std::vector::const_iterator itr) { - float *data_ptr = reinterpret_cast((*itr).dptr_); - if (memType == Data) - (*blob)->set_gpu_data(data_ptr); - else - MXCAFFEBLOB(*blob, float)->set_gpu_diff(data_ptr); -} - -template<> -void SetDataGradToBlob(caffeMemoryTypes memType, - std::vector<::caffe::Blob*>::iterator blob, - std::vector::const_iterator itr) { - double *data_ptr = reinterpret_cast((*itr).dptr_); - if (memType == Data) - (*blob)->set_gpu_data(data_ptr); - else - MXCAFFEBLOB(*blob, double)->set_gpu_diff(data_ptr); -} - -mxnet::TShape Vector2TShape(const std::vector &vec_int) { - std::vector vec; - for (uint32_t i = 0; i < vec_int.size(); ++i) - vec.push_back(vec_int[i]); - // 0-dim represents scalar in caffe - if (vec_int.size() == 0) - vec.push_back(1); - return {vec.begin(), vec.end()}; -} - -std::vector TShape2Vector(const mxnet::TShape &tshape) { - std::vector s; - for (uint32_t i =0 ; i < tshape.ndim(); ++i) - s.push_back(tshape[i]); - return s; -} - -} // namespace caffe -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_blob.h b/plugin/caffe/caffe_blob.h deleted file mode 100644 index 6243b5dc8c88..000000000000 --- a/plugin/caffe/caffe_blob.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_blob.h - * \brief conversion between tensor and caffeBlob - * \author Haoran Wang -*/ -#ifndef PLUGIN_CAFFE_CAFFE_BLOB_H_ -#define PLUGIN_CAFFE_CAFFE_BLOB_H_ - -#include -#include -#include -#include - -namespace mxnet { -namespace op { - -namespace caffe { - -// Declare Memory Type for Caffe blob -enum caffeMemoryTypes {Data, Grad, Non}; - -mxnet::TShape Vector2TShape(const std::vector &vec_int); -std::vector TShape2Vector(const mxnet::TShape &tshape); - -// implementation of tensor to blob, called by TensorToBlob -template -void SetDataGradToBlob(caffeMemoryTypes memType, - typename std::vector< ::caffe::Blob*>::iterator blob, - typename std::vector::const_iterator itr); - -/** - * \brief The interface to convert mxnet's tensor to caffe's blob - * \brief called in caffe_operator_inl.h - */ -template -void TBlob2CaffeBlob(caffeMemoryTypes memType, - typename std::vector< ::caffe::Blob*>::iterator blob, - typename std::vector::const_iterator tblob, - int n = 1) { - for (int i = 0; i < n; ++i, ++blob, ++tblob) { - (*blob)->Reshape(TShape2Vector((*tblob).shape_)); - SetDataGradToBlob(memType, blob, tblob); - } -} - -template -void SetOpBlobs(::caffe::Layer *caffeOp, - const std::vector< ::caffe::Blob*>& weights) { - CHECK_EQ(caffeOp->blobs().size(), weights.size()); - for (int i = 0; i < weights.size(); ++i) - caffeOp->blobs()[i].reset(weights[i]); -} - -/**! - * \brief Workaround for missing functions in ::caffe::Blob - * \warning Do not add or override any virtual functions in this class - * @tparam Dtype - */ -template -class CaffeBlobFriend : public ::caffe::Blob { - public: - inline void set_cpu_diff(Dtype* diff) { - CHECK(diff); - this->diff_->set_cpu_data(diff); - } - - inline void set_gpu_diff(Dtype* diff) { - CHECK(diff); - this->diff_->set_gpu_data(diff); - } -}; - -#define MXCAFFEBLOB(__object$, __type$) \ - (static_cast *>(__object$)) - -/**! - * \brief Workaround for missing functions in ::caffe::Layer - * \warning Do not add or override any virtual functions in this class - * @tparam Dtype - */ -template -class CaffeLayerFriend : public ::caffe::Layer { - explicit CaffeLayerFriend(const ::caffe::LayerParameter& param) = delete; - public: - inline void SetPhase(::caffe::Phase p) { - this->phase_ = p; - } -}; - -#define MXCAFFELAYER(__object$, __type$) \ - (static_cast *>(__object$)) - -} // namespace caffe -} // namespace op -} // namespace mxnet - -#endif // PLUGIN_CAFFE_CAFFE_BLOB_H_ diff --git a/plugin/caffe/caffe_common.cc b/plugin/caffe/caffe_common.cc deleted file mode 100644 index dd445efbd659..000000000000 --- a/plugin/caffe/caffe_common.cc +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_common.h - * \brief Common functions for caffeOp and caffeLoss symbols - * \author Haoran Wang -*/ -#include -#include -#include"caffe_common.h" - -namespace mxnet { -namespace op { -namespace caffe { - -// Cpu implementation of set_mode -template<> -void CaffeMode::SetMode() { - ::caffe::Caffe::set_mode(::caffe::Caffe::CPU); -} - -// Gpu implementation of set_mode -template<> -void CaffeMode::SetMode() { - ::caffe::Caffe::set_mode(::caffe::Caffe::GPU); -} - -} // namespace caffe -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_common.h b/plugin/caffe/caffe_common.h deleted file mode 100644 index 211d8c44d518..000000000000 --- a/plugin/caffe/caffe_common.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_common.h - * \brief Common functions for caffeOp and caffeLoss symbols - * \author Haoran Wang -*/ - -#ifndef PLUGIN_CAFFE_CAFFE_COMMON_H_ -#define PLUGIN_CAFFE_CAFFE_COMMON_H_ - -#include -#include - -#include - -#include -#include -#include - -#include -#include -#include - -namespace mxnet { -namespace op { -namespace caffe { - -/** - * \brief The class sets caffe's mode before doing forward/backward - * \tparam xpu The device that the op will be executed on. - */ -class CaffeMode { - public: - template static void SetMode(); -}; - -// Initialization funciton called by caffeOp & caffeLoss -template -void InitCaffeBlobs(std::vector< ::caffe::Blob*>* v, int n_num) { - for (index_t i=0; i < n_num; ++i) - v->push_back(new ::caffe::Blob()); -} - -template -void DelCaffeBlobs(std::vector< ::caffe::Blob*>* v, int n_num) { - for (index_t i=0; i < n_num; ++i) - delete v->at(i); -} - - -struct NULLDeleter {template void operator()(T*){}}; - -template -void Deleter(::caffe::Layer *ptr) { -} - -template -class LayerRegistry { - public: - static ::caffe::Layer * CreateLayer(const ::caffe::LayerParameter& param) { - ::caffe::shared_ptr< ::caffe::Layer > ptr = - ::caffe::LayerRegistry::CreateLayer(param); - // avoid caffe::layer destructor, which deletes the weights layer owns - new ::caffe::shared_ptr< ::caffe::Layer >(ptr); - return ptr.get(); - } -}; - -} // namespace caffe -} // namespace op -} // namespace mxnet - -/*! \brief override type_name for caffe::LayerParameter */ -namespace dmlc { - DMLC_DECLARE_TYPE_NAME(::caffe::LayerParameter, "caffe-layer-parameter"); -} - -#endif // PLUGIN_CAFFE_CAFFE_COMMON_H_ diff --git a/plugin/caffe/caffe_data_iter.cc b/plugin/caffe/caffe_data_iter.cc deleted file mode 100644 index 552b9dce9f3d..000000000000 --- a/plugin/caffe/caffe_data_iter.cc +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2015 by Contributors - * \file caffe_data_iter.cc - * \brief register mnist iterator -*/ -#include -#include -#include -#include - -#include "caffe_common.h" -#include "caffe_stream.h" -#include "caffe_fieldentry.h" -#include "caffe_blob.h" -#include "../../src/io/inst_vector.h" -#include "../../src/io/iter_prefetcher.h" - -#define CHECK_NEXT_TIMING - -#ifdef CHECK_NEXT_TIMING -#define IF_CHECK_TIMING(__t$) __t$ -#else -#define IF_CHECK_TIMING(__t$) -#endif - -namespace mxnet { -namespace io { - -struct CaffeDataParam : public dmlc::Parameter { - /*! \brief protobuf text */ - ::caffe::LayerParameter prototxt; - /*! \brief number of iterations per epoch */ - int num_examples; - /*! \brief data mode */ - bool flat; - - DMLC_DECLARE_PARAMETER(CaffeDataParam) { - DMLC_DECLARE_FIELD(prototxt).set_default("layer{}") - .describe("Caffe's layer parameter"); - DMLC_DECLARE_FIELD(flat).set_default(false) - .describe("Augmentation Param: Whether to flat the data into 1D."); - DMLC_DECLARE_FIELD(num_examples).set_lower_bound(1).set_default(10000) - .describe("Number of examples in the epoch."); - } -}; - -template -class CaffeDataIter : public IIterator { - public: - explicit CaffeDataIter(int type_flag) : batch_size_(0), channels_(1), width_(1), height_(1) - , type_flag_(type_flag), loc_(0) - {} - virtual ~CaffeDataIter(void) {} - - // intialize iterator loads data in - virtual void Init(const std::vector >& kwargs) { - std::map kmap(kwargs.begin(), kwargs.end()); - param_.InitAllowUnknown(kmap); - - // Caffe seems to understand phase inside an "include {}" block - if (!param_.prototxt.has_phase()) { - if (param_.prototxt.include().size()) { - if (param_.prototxt.include(0).has_phase()) { - param_.prototxt.set_phase(param_.prototxt.include(0).phase()); - } - } - } - - std::string type = param_.prototxt.type(); - caffe_data_layer_ = caffe::LayerRegistry::CreateLayer(param_.prototxt); - CHECK(caffe_data_layer_ != nullptr) << "Failed creating caffe data layer"; - const size_t top_size = param_.prototxt.top_size(); - if (top_size > 0) { - if (top_size > NR_SUPPORTED_TOP_ITEMS) { - LOG(WARNING) - << "Too may \"top\" items, only two (one data, one label) are currently supported"; - } - top_.reserve(top_size); - for (size_t x = 0; x < top_size; ++x) { - ::caffe::Blob *blob = new ::caffe::Blob(); - cleanup_blobs_.push_back(std::unique_ptr<::caffe::Blob>(blob)); - top_.push_back(blob); - } - caffe_data_layer_->SetUp(bottom_, top_); - const std::vector &shape = top_[DATA]->shape(); - const size_t shapeDimCount = shape.size(); - if (shapeDimCount > 0) { - batch_size_ = shape[0]; - if (shapeDimCount > 1) { - channels_ = shape[1]; - if (shapeDimCount > 2) { - width_ = shape[2]; - if (shapeDimCount > 3) { - height_ = shape[3]; - } - } - } - } - - if (top_size > DATA) { - if (param_.flat) { - batch_data_ = TBlob(nullptr, mshadow::Shape2(batch_size_, - channels_ * width_ * height_), - cpu::kDevCPU, type_flag_); - } else { - batch_data_ = TBlob(nullptr, mxnet::TShape(top_[DATA]->shape().begin(), - top_[DATA]->shape().end()), - cpu::kDevCPU, type_flag_); - } - } - out_.data.clear(); - if (top_size > LABEL) { - batch_label_ = TBlob(nullptr, mxnet::TShape(top_[LABEL]->shape().begin(), - top_[LABEL]->shape().end()), - cpu::kDevCPU, type_flag_); - } - out_.batch_size = batch_size_; - } - } - - virtual void BeforeFirst(void) { - loc_ = 0; - } - - virtual bool Next(void) { - // MxNet iterator is expected to return CPU-accessible memory - if (::caffe::Caffe::mode() != ::caffe::Caffe::CPU) { - ::caffe::Caffe::set_mode(::caffe::Caffe::CPU); - CHECK_EQ(::caffe::Caffe::mode(), ::caffe::Caffe::CPU); - } - caffe_data_layer_->Forward(bottom_, top_); - CHECK_GT(batch_size_, 0) << "batch size must be greater than zero"; - CHECK_EQ(out_.batch_size, batch_size_) << "Internal Error: batch size mismatch"; - - if (loc_ + batch_size_ <= param_.num_examples) { - batch_data_.dptr_ = top_[DATA]->mutable_cpu_data(); - batch_label_.dptr_ = top_[LABEL]->mutable_cpu_data(); - - out_.data.clear(); - out_.data.push_back(batch_data_); - out_.data.push_back(batch_label_); - loc_ += batch_size_; - return true; - } - - return false; - } - - virtual const TBlobBatch &Value(void) const { - return out_; - } - - private: - /*! \brief indexes into top_ */ - enum { DATA = 0, LABEL, NR_SUPPORTED_TOP_ITEMS }; - - /*! \brief MNISTCass iter params */ - CaffeDataParam param_; - /*! \brief Shape scalar values */ - index_t batch_size_, channels_, width_, height_; - /*! \brief Caffe data layer */ - boost::shared_ptr > caffe_data_layer_; - /*! \brief batch data blob */ - mxnet::TBlob batch_data_; - /*! \brief batch label blob */ - mxnet::TBlob batch_label_; - /*! \brief Output blob data for this iteration */ - TBlobBatch out_; - /*! \brief Bottom and top connection-point blob data */ - std::vector<::caffe::Blob*> bottom_, top_; - /*! \brief Cleanup these blobs on exit */ - std::list>> cleanup_blobs_; - /*! \brief type flag of the tensor blob */ - const int type_flag_; - /*! \brief Blobs done so far */ - std::atomic loc_; -}; // class CaffeDataIter - -class CaffeDataIterWrapper : public PrefetcherIter { - public: - CaffeDataIterWrapper() : PrefetcherIter(NULL), next_time_(0) {} - virtual ~CaffeDataIterWrapper() { - IF_CHECK_TIMING( - if (next_time_.load() > 0) { - LOG(WARNING) << "Caffe data loader was blocked for " - << next_time_.load() - << " ms waiting for incoming data"; - } - ) - } - virtual void Init(const std::vector >& kwargs) { - // We need to init prefetcher args in order to get dtype - this->param_.InitAllowUnknown(kwargs); - if (!this->param_.dtype) this->param_.dtype = mshadow::kFloat32; - switch (this->param_.dtype.value()) { - case mshadow::kFloat32: - this->loader_.reset(new CaffeDataIter(this->param_.dtype.value())); - break; - case mshadow::kFloat64: - this->loader_.reset(new CaffeDataIter(this->param_.dtype.value())); - break; - case mshadow::kFloat16: - LOG(FATAL) << "float16 layer is not supported by caffe"; - return; - case mshadow::kBfloat16: - LOG(FATAL) << "bfloat16 layer is not supported by caffe"; - return; - default: - LOG(FATAL) << "Unsupported type " << this->param_.dtype.value(); - return; - } - PrefetcherIter::Init(kwargs); - this->param_.prefetch_buffer = 1; - } - virtual void BeforeFirst(void) { - return PrefetcherIter::BeforeFirst(); - } - virtual bool Next(void) { - IF_CHECK_TIMING( - const uint64_t start_time = GetTickCountMS(); - ) - const bool rc = PrefetcherIter::Next(); - IF_CHECK_TIMING( - const uint64_t diff_time = GetTickCountMS() - start_time; - next_time_.fetch_add(diff_time); - ) - return rc; - } - - protected: - IF_CHECK_TIMING( - static uint64_t GetTickCountMS() { - struct timeval tv; - gettimeofday(&tv, 0); - return uint64_t( tv.tv_sec ) * 1000 + tv.tv_usec / 1000; - } - ) - - /*! \brief milliseconds spent in Next() */ - std::atomic next_time_; -}; // class CaffeDataIterWrapper - -DMLC_REGISTER_PARAMETER(CaffeDataParam); - -MXNET_REGISTER_IO_ITER(CaffeDataIter) -.describe("Create MxNet iterator for a Caffe data layer.") -.add_arguments(CaffeDataParam::__FIELDS__()) -.add_arguments(PrefetcherParam::__FIELDS__()) -.set_body([]() { - return new CaffeDataIterWrapper(); -}); - -} // namespace io -} // namespace mxnet diff --git a/plugin/caffe/caffe_fieldentry.h b/plugin/caffe/caffe_fieldentry.h deleted file mode 100644 index f97b76519e0e..000000000000 --- a/plugin/caffe/caffe_fieldentry.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_fieldentry.h - * \brief Implement FieldEntry - * \author Haoran Wang - */ -#ifndef PLUGIN_CAFFE_CAFFE_FIELDENTRY_H_ -#define PLUGIN_CAFFE_CAFFE_FIELDENTRY_H_ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -namespace dmlc { -namespace parameter { - -// specialize define for Layer Parameter -template<> -class FieldEntry - : public FieldEntryBase, caffe::LayerParameter> { - public: - // parent class - typedef FieldEntryBase, caffe::LayerParameter> Parent; - - - bool ReadProtoFromTextContent(const std::string& text, - ::google::protobuf::Message* proto) const { - bool success = google::protobuf::TextFormat::ParseFromString(text, proto); - return success; - } - - /** - * /brief Customize set method for LayerParameter - * /tparam value string of caffe's layer configuration - * */ - virtual void Set(void *head, const std::string &value) const { - caffe::NetParameter net_param; - if (!ReadProtoFromTextContent(value, &net_param)) - CHECK(false)<< "Caffe Net Prototxt: " << value << "Initialized Failed"; - - CHECK_EQ(net_param.layer_size(), 1) << "Prototxt" << value <<" more than a layer"; - caffe::LayerParameter *layer_param = new caffe::LayerParameter(net_param.layer(0)); - this->Get(head) = (*layer_param); - } - - virtual void PrintValue(std::ostream &os, caffe::LayerParameter value) const { // NOLINT(*) - } - - virtual void PrintDefaultValueString(std::ostream &os) const { // NOLINT(*) - std::string s; - caffe::NetParameter np; - // Avoid wasting time making a copy -- just push in out default object's pointer - np.mutable_layer()->AddAllocated(const_cast<::caffe::LayerParameter *>(&default_value_)); - google::protobuf::TextFormat::PrintToString(np, &s); - np.mutable_layer()->ReleaseLast(); - os << '\'' << s << '\''; - } - - // override set_default - inline FieldEntry &set_default(const std::string &value) { - caffe::NetParameter net_param; - if (!ReadProtoFromTextContent(value, &net_param)) - CHECK(false)<< "Caffe Net Prototxt: " << value << "Initialized Failed"; - - CHECK_EQ(net_param.layer_size(), 1) << "Protoxt " << value <<" is more than one layer"; - default_value_ = caffe::LayerParameter(net_param.layer(0)); - has_default_ = true; - // return self to allow chaining - return this->self(); - } -}; - -} // namespace parameter -} // namespace dmlc - -#endif // PLUGIN_CAFFE_CAFFE_FIELDENTRY_H_ diff --git a/plugin/caffe/caffe_loss-inl.h b/plugin/caffe/caffe_loss-inl.h deleted file mode 100644 index 98c714612dca..000000000000 --- a/plugin/caffe/caffe_loss-inl.h +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_loss-inl.h - * \brief Caffe Operator - * \author Haoran Wang -*/ -#ifndef PLUGIN_CAFFE_CAFFE_LOSS_INL_H_ -#define PLUGIN_CAFFE_CAFFE_LOSS_INL_H_ - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "../../src/operator/operator_common.h" -#include "caffe_common.h" -#include "caffe_stream.h" -#include "caffe_fieldentry.h" -#include "caffe_blob.h" - -namespace mxnet { -namespace op { - -struct CaffeLossParam : public dmlc::Parameter { - ::caffe::LayerParameter prototxt; - int num_data, num_out; - float grad_scale; - - DMLC_DECLARE_PARAMETER(CaffeLossParam) { - DMLC_DECLARE_FIELD(prototxt).set_default("layer{}") - .describe("Caffe's layer parameter"); - DMLC_DECLARE_FIELD(num_data).set_range(0, 100).set_default(2) - .describe("Operator input number"); - DMLC_DECLARE_FIELD(num_out).set_range(0, 100).set_default(1) - .describe("Operator output number"); - DMLC_DECLARE_FIELD(grad_scale) - .set_default(1.0f) - .describe("Scale the gradient by a float factor (a.k.a weight of this loss)."); - } -}; - -/** - * \brief this is the implementation of caffe operator in caffe. - * \tparam xpu the device that the op will be executed on. - */ -template -class CaffeLoss : public Operator { - public: - explicit CaffeLoss(CaffeLossParam p):param_(p), - setup_(false) { - std::string type = param_.prototxt.type(); - caffeOp_ = caffe::LayerRegistry::CreateLayer(param_.prototxt); - grad_scale_ = (Dtype)param_.grad_scale; - - caffe::InitCaffeBlobs(&bot_, param_.num_data); - caffe::InitCaffeBlobs(&top_, param_.num_out); - flags_.resize(param_.num_data); - } - - ~CaffeLoss() { - caffe::DelCaffeBlobs(&bot_, param_.num_data); - caffe::DelCaffeBlobs(&top_, param_.num_out); - } - - virtual void Forward(const OpContext &ctx, - const std::vector &in_data, - const std::vector &req, - const std::vector &out_data, - const std::vector &aux_args) { - // Set mode before forward - caffe::CaffeMode::SetMode(); - using ::caffe::Blob; - using std::vector; - using namespace mshadow; - using namespace mshadow::expr; - for (uint32_t i = 0; i < req.size(); ++i) - CHECK_EQ(req[i], kWriteTo); - - CHECK_EQ(in_data.size(), param_.num_data); - CHECK_EQ(out_data.size(), param_.num_out); - -#if defined(__CUDACC__) - Stream *s = ctx.get_stream(); - // TODO(Haoran): when need cublas handle in stream? - CHECK_EQ(s->blas_handle_ownership_, Stream::OwnHandle) - << "Must init CuBLAS handle in stream"; -#endif // __CUDACC__ - - caffe::TBlob2CaffeBlob(caffe::Data, - bot_.begin(), - in_data.begin(), - param_.num_data); - caffe::TBlob2CaffeBlob(caffe::Data, - top_.begin(), - out_data.begin(), - param_.num_out); - CaffeOpSetup(); - if (ctx.is_train) - MXCAFFELAYER(caffeOp_, Dtype)->SetPhase(::caffe::TRAIN); - else - MXCAFFELAYER(caffeOp_, Dtype)->SetPhase(::caffe::TEST); - caffeOp_->Forward(bot_, top_); - -#if defined(__CUDACC__) - // Sync cpu data to gpu data - for (uint32_t i = 0; i < top_.size(); ++i) - top_[i]->gpu_data(); - - CHECK_EQ(cudaStreamSynchronize(NULL), cudaSuccess); -#endif // __CUDACC__ - } - - // Set up caffe op with real data - void CaffeOpSetup() { - if (!setup_) { - setup_ = true; - caffeOp_->SetUp(bot_, top_); - } - } - - virtual void Backward(const OpContext &ctx, - const std::vector &out_grad, - const std::vector &in_data, - const std::vector &out_data, - const std::vector &req, - const std::vector &in_grad, - const std::vector &aux_args) { - // Set mode before backward - caffe::CaffeMode::SetMode(); - using namespace mshadow; - using namespace mshadow::expr; - CHECK_EQ(out_grad.size(), param_.num_out); - for (int i = 0; i < param_.num_data; ++i) - CHECK(req[i] != kAddTo) << "caffe doesn't accm diff on bottom data"; - CHECK(in_data.size() == param_.num_data); - -#if defined(__CUDACC__) - Stream *s = ctx.get_stream(); - // TODO(Haoran): when need cublas handle in stream? - CHECK_EQ(s->blas_handle_ownership_, Stream::OwnHandle) - << "Must init CuBLAS handle in stream"; -#endif // __CUDACC__ - - caffe::TBlob2CaffeBlob(caffe::Grad, - bot_.begin(), - in_grad.begin(), - param_.num_data); - // Pass grad scale to caffe blob - MXCAFFEBLOB(top_[0], Dtype)->set_cpu_diff(&grad_scale_); - - // Set BP flag - for (int i = 0; i < param_.num_data; ++i) - flags_[i] = req[i] != kNullOp; - - caffeOp_->Backward(top_, flags_, bot_); - -#if defined(__CUDACC__) - // Sync cpu diff to gpu diff - for (uint32_t i = 0; i < bot_.size(); ++i) - bot_[i]->gpu_diff(); - - CHECK_EQ(cudaStreamSynchronize(NULL), cudaSuccess); -#endif // __CUDACC__ - } - - private: - CaffeLossParam param_; - ::caffe::Layer *caffeOp_; - Dtype grad_scale_; - std::vector< ::caffe::Blob *> bot_, top_; - std::vector flags_; - bool setup_; -}; // class CaffeLoss - -// Decalre Factory function, used for dispatch specialization -template -Operator* CreateOp(CaffeLossParam param, int); - -#if DMLC_USE_CXX11 -class CaffeLossProp : public OperatorProperty { - public: - std::vector ListArguments() const override { - return {"data", "label"}; - } - - void Init(const std::vector >& kwargs) override { - param_.Init(kwargs); - CHECK_EQ(param_.num_out, 1); - CHECK_EQ(param_.num_data, 2); - - // Fetch grad_scale from prototxt - if ((param_.prototxt.loss_weight_size() > 0)) - param_.grad_scale = param_.prototxt.loss_weight(0); - } - - std::map GetParams() const override { - return param_.__DICT__(); - } - - /*brief Set up caffeop to infer output shape*/ - bool InferShape(mxnet::ShapeVector *in_shape, - mxnet::ShapeVector *out_shape, - mxnet::ShapeVector *aux_shape) const override { - using namespace mshadow; - using ::caffe::Blob; - using std::vector; - if (caffeOp_ == NULL) - caffeOp_ = caffe::LayerRegistry::CreateLayer(param_.prototxt); - - CHECK_GE(in_shape->size(), param_.num_data); - // Initialize empty bottom & top blobs for caffeOp setup - vector *> bot_blobs, top_blobs; - - for (int i = 0; i < param_.num_data; ++i) { - mxnet::TShape tshape = (*in_shape)[i]; - if (tshape.ndim() == 0) return false; - auto blob_ptr = new Blob(); - blob_ptr->Reshape(caffe::TShape2Vector(tshape)); - bot_blobs.push_back(blob_ptr); - } - - for (int i = 0; i < param_.num_out; ++i) - top_blobs.push_back(new Blob()); - - caffeOp_->SetUp(bot_blobs, top_blobs); - CHECK_EQ(in_shape->size(), caffeOp_->blobs().size() + param_.num_data); - // Initialize out shapes - out_shape->clear(); - for (auto blob : top_blobs) { - mxnet::TShape tshape = caffe::Vector2TShape(blob->shape()); - out_shape->push_back(tshape); - } - - for (auto blob_ptr : bot_blobs) - delete blob_ptr; - for (auto blob_ptr : top_blobs) - delete blob_ptr; - - return true; - } - - OperatorProperty* Copy() const override { - auto copy_prop = new CaffeLossProp(); - copy_prop->param_ = this->param_; - return copy_prop; - } - - std::string TypeString() const override { - return "CaffeLoss"; - } - - std::vector DeclareBackwardDependency( - const std::vector &out_grad, - const std::vector &in_data, - const std::vector &out_data) const override { - std::vector dep; - dep.insert(dep.end(), in_data.begin(), in_data.end()); - dep.insert(dep.end(), out_data.begin(), out_data.end()); - return dep; - } - - Operator* CreateOperator(Context ctx) const override { - LOG(FATAL) << "Not Implemented."; - return NULL; - } - - Operator* CreateOperatorEx(Context ctx, mxnet::ShapeVector *in_shape, - std::vector *in_type) const override; - - - private: - mutable CaffeLossParam param_; - mutable ::caffe::Layer *caffeOp_; -}; // class CaffeLossSymbol -#endif - -} // namespace op -} // namespace mxnet -#endif // PLUGIN_CAFFE_CAFFE_LOSS_INL_H_ diff --git a/plugin/caffe/caffe_loss.cc b/plugin/caffe/caffe_loss.cc deleted file mode 100644 index c2d1c1b9bab9..000000000000 --- a/plugin/caffe/caffe_loss.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_loss.cc - * \brief caffe loss - * \author Haoran Wang -*/ -#include "./caffe_loss-inl.h" - -namespace mxnet { -namespace op { -template<> -Operator *CreateOp(CaffeLossParam param, int dtype) { - Operator *op = NULL; - switch (dtype) { - case mshadow::kFloat32: - op = new CaffeLoss(param); - break; - case mshadow::kFloat64: - op = new CaffeLoss(param); - break; - case mshadow::kFloat16: - LOG(FATAL) << "float16 layer is not supported by caffe"; - break; - case mshadow::kBfloat16: - LOG(FATAL) << "bfloat16 layer is not supported by caffe"; - return; - default: - LOG(FATAL) << "Unsupported type " << dtype; - } - return op; -} - -// DO_BIND_DISPATCH comes from static_operator_common.h -Operator *CaffeLossProp::CreateOperatorEx(Context ctx, mxnet::ShapeVector *in_shape, - std::vector *in_type) const { - std::vector out_type, aux_type; - mxnet::ShapeVector out_shape, aux_shape; - out_type.resize(this->ListOutputs().size()); - out_shape.resize(this->ListOutputs().size()); - aux_type.resize(this->ListAuxiliaryStates().size()); - aux_shape.resize(this->ListAuxiliaryStates().size()); - CHECK(InferType(in_type, &out_type, &aux_type)); - CHECK(InferShape(in_shape, &out_shape, &aux_shape)); - DO_BIND_DISPATCH(CreateOp, param_, (*in_type)[0]); -} - -DMLC_REGISTER_PARAMETER(CaffeLossParam); - -MXNET_REGISTER_OP_PROPERTY(CaffeLoss, CaffeLossProp) -.describe("Caffe loss layer") -.add_arguments(CaffeLossParam::__FIELDS__()); - -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_loss.cu b/plugin/caffe/caffe_loss.cu deleted file mode 100644 index ff81e1c1ffa6..000000000000 --- a/plugin/caffe/caffe_loss.cu +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_loss_gpu.cc - * \brief caffe loss - * \author Haoran Wang -*/ -#include "./caffe_loss-inl.h" - -namespace mxnet { -namespace op { -template<> -Operator* CreateOp(CaffeLossParam param, int dtype) { - Operator *op = NULL; - switch (dtype) { - case mshadow::kFloat32: - op = new CaffeLoss(param); - break; - case mshadow::kFloat64: - op = new CaffeLoss(param); - break; - case mshadow::kFloat16: - LOG(FATAL) << "float16 layer is not supported by caffe"; - break; - case mshadow::kBfloat16: - LOG(FATAL) << "bfloat16 layer is not supported by caffe"; - break; - default: - LOG(FATAL) << "Unsupported type " << dtype; - } - return op; -} - -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_op-inl.h b/plugin/caffe/caffe_op-inl.h deleted file mode 100644 index b4ab0926199c..000000000000 --- a/plugin/caffe/caffe_op-inl.h +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_op-inl.h - * \brief Caffe Operator - * \author Haoran Wang -*/ -#ifndef PLUGIN_CAFFE_CAFFE_OP_INL_H_ -#define PLUGIN_CAFFE_CAFFE_OP_INL_H_ - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "../../src/operator/operator_common.h" -#include "caffe_common.h" -#include "caffe_stream.h" -#include "caffe_fieldentry.h" -#include "caffe_blob.h" - -namespace mxnet { -namespace op { - -struct CaffeOpParam : public dmlc::Parameter { - ::caffe::LayerParameter prototxt; - int num_data, num_weight, num_out; - - DMLC_DECLARE_PARAMETER(CaffeOpParam) { DMLC_DECLARE_FIELD(prototxt).set_default("layer{}") - .describe("Caffe's layer parameter"); - DMLC_DECLARE_FIELD(num_data).set_default(1) - .describe("Operator input number"); - DMLC_DECLARE_FIELD(num_weight).set_default(0) - .describe("Weight number"); - DMLC_DECLARE_FIELD(num_out).set_default(1) - .describe("Operator output number"); - } -}; - - -/** - * \brief this is the implementation of caffe operator in caffe. - * \tparam xpu the device that the op will be executed on. - */ -template -class CaffeOp : public Operator { - public: - explicit CaffeOp(CaffeOpParam p):param_(p), - init_w_(false), - init_wd_(false), - setup_(false) { - std::string type = param_.prototxt.type(); - caffeOp_ = caffe::LayerRegistry::CreateLayer(param_.prototxt); - - caffe::InitCaffeBlobs(&bot_, param_.num_data); - caffe::InitCaffeBlobs(&top_, param_.num_out); - caffe::InitCaffeBlobs(&wei_, param_.num_weight); - flags_.resize(param_.num_data); - } - - ~CaffeOp() { - caffe::DelCaffeBlobs(&bot_, param_.num_data); - caffe::DelCaffeBlobs(&top_, param_.num_out); - caffe::DelCaffeBlobs(&wei_, param_.num_weight); - } - - virtual void Forward(const OpContext &ctx, - const std::vector &in_data, - const std::vector &req, - const std::vector &out_data, - const std::vector &aux_args) { - // Set mode before forward - caffe::CaffeMode::SetMode(); - using ::caffe::Blob; - using std::vector; - using namespace mshadow; - using namespace mshadow::expr; - for (uint32_t i = 0; i < req.size(); ++i) - CHECK_EQ(req[i], kWriteTo); - int expected_num_data = param_.num_weight + param_.num_data; - CHECK_EQ(in_data.size(), expected_num_data); - CHECK_EQ(out_data.size(), param_.num_out); - -#if defined(__CUDACC__) - Stream *s = ctx.get_stream(); - // TODO(Haoran): when need cublas handle in stream? - CHECK_EQ(s->blas_handle_ownership_, Stream::OwnHandle) - << "Must init CuBLAS handle in stream"; -#endif // __CUDACC__ - - caffe::TBlob2CaffeBlob(caffe::Data, - bot_.begin(), - in_data.begin(), - param_.num_data); - caffe::TBlob2CaffeBlob(caffe::Data, - top_.begin(), - out_data.begin(), - param_.num_out); - CaffeOpSetup(); - // Init caffe's weight pointer - if (!init_w_) { - init_w_ = true; - caffe::TBlob2CaffeBlob(caffe::Data, - wei_.begin(), - in_data.begin() + param_.num_data, - param_.num_weight); - caffe::SetOpBlobs(caffeOp_, wei_); - } - if (ctx.is_train) - MXCAFFELAYER(caffeOp_, Dtype)->SetPhase(::caffe::TRAIN); - else - MXCAFFELAYER(caffeOp_, Dtype)->SetPhase(::caffe::TEST); - caffeOp_->Forward(bot_, top_); - -#if defined(__CUDACC__) - // Sync cpu data to gpu data - for (uint32_t i = 0; i < top_.size(); ++i) - top_[i]->gpu_data(); - - CHECK_EQ(cudaStreamSynchronize(NULL), cudaSuccess); -#endif // __CUDACC__ - } - - // Set up caffe op with real data - void CaffeOpSetup() { - if (!setup_) { - setup_ = true; - caffeOp_->SetUp(bot_, top_); - } - } - - virtual void Backward(const OpContext &ctx, - const std::vector &out_grad, - const std::vector &in_data, - const std::vector &out_data, - const std::vector &req, - const std::vector &in_grad, - const std::vector &aux_args) { - // Set mode before backward - caffe::CaffeMode::SetMode(); - using namespace mshadow; - using namespace mshadow::expr; - CHECK_EQ(out_grad.size(), param_.num_out); - for (int i = 0; i < param_.num_data; ++i) - CHECK(req[i] != kAddTo) << "caffe doesn't accm diff on bottom data"; - - int expected_num_data = param_.num_weight + param_.num_data; - CHECK(in_data.size() == expected_num_data && in_grad.size() == expected_num_data); - CHECK_EQ(req.size(), expected_num_data); - - Stream *s = ctx.get_stream(); -#if defined(__CUDACC__) - // TODO(Haoran): when need cublas handle in stream? - CHECK_EQ(s->blas_handle_ownership_, Stream::OwnHandle) - << "Must init CuBLAS handle in stream"; -#endif // __CUDACC__ - - caffe::TBlob2CaffeBlob(caffe::Grad, - bot_.begin(), - in_grad.begin(), - param_.num_data); - caffe::TBlob2CaffeBlob(caffe::Grad, - top_.begin(), - out_grad.begin(), - param_.num_out); - - // Init caffe's gradient pointer - if (!init_wd_) { - init_wd_ = true; - caffe::TBlob2CaffeBlob(caffe::Grad, - wei_.begin(), - in_grad.begin() + param_.num_data, - param_.num_weight); - } - - // Handle OpReqType of weights - for (int i = param_.num_data; i < expected_num_data; ++i) - HandleOpReq(s, req[i], in_grad[i]); - - // Set BP flag - for (int i = 0; i < param_.num_data; ++i) - flags_[i] = req[i] != kNullOp; - - caffeOp_->Backward(top_, flags_, bot_); - -#if defined(__CUDACC__) - // Sync cpu diff to gpu diff - for (uint32_t i = 0; i < bot_.size(); ++i) - bot_[i]->gpu_diff(); - - CHECK_EQ(cudaStreamSynchronize(NULL), cudaSuccess); -#endif // __CUDACC__ - } - - void HandleOpReq(mshadow::Stream*s, OpReqType req, const TBlob& in_g) { - if ((req == kWriteInplace) || (req == kWriteTo)) { - mshadow::Tensor grad = in_g.FlatTo2D(s); - grad = 0; - } - } - - private: - CaffeOpParam param_; - ::caffe::Layer *caffeOp_; - std::vector< ::caffe::Blob *> bot_, top_, wei_; - std::vector flags_; - bool init_w_, init_wd_, setup_; -}; // class CaffeOp - -// Decalre Factory function, used for dispatch specialization -template -Operator* CreateOp(CaffeOpParam param, int); - -#if DMLC_USE_CXX11 -class CaffeOpProp : public OperatorProperty { - public: - std::vector ListArguments() const override { - std::vector res; - for (int i = 0; i < param_.num_data; ++i) - res.push_back(std::string("data_") + std::to_string(i)); - - for (int i = 0; i < param_.num_weight; ++i) { - if (i == 0) - res.push_back(std::to_string(i) + "_weight"); - else - res.push_back(std::to_string(i) + "_bias"); - } - return res; - } - - std::vector ListOutputs() const override { - if (param_.num_out > 1) { - std::vector ret; - for (int i = 0; i < param_.num_out; ++i) - ret.push_back("output" + std::to_string(i)); - return ret; - } else { - return {"output"}; - } - } - - void Init(const std::vector >& kwargs) override { - param_.Init(kwargs); - } - - std::map GetParams() const override { - return param_.__DICT__(); - } - - /* - * \brief Set up caffeOp_ to infer weights & output shape - * \brief Initialize param_'s in & out dims - */ - bool InferShape(mxnet::ShapeVector *in_shape, - mxnet::ShapeVector *out_shape, - mxnet::ShapeVector *aux_shape) const override { - if (caffeOp_ == NULL) - caffeOp_ = caffe::LayerRegistry::CreateLayer(param_.prototxt); - using namespace mshadow; - using ::caffe::Blob; - using std::vector; - CHECK_GE(in_shape->size(), param_.num_data); - // Initialize emtryp bottom & top blobs for caffeop - vector *> bot_blobs, top_blobs; - - for (int i = 0; i < param_.num_data; ++i) { - mxnet::TShape tshape = (*in_shape)[i]; - if (tshape.ndim() == 0) return false; - auto blob_ptr = new Blob(); - blob_ptr->Reshape(caffe::TShape2Vector(tshape)); - bot_blobs.push_back(blob_ptr); - } - - for (int i = 0; i < param_.num_out; ++i) - top_blobs.push_back(new Blob()); - - caffeOp_->SetUp(bot_blobs, top_blobs); - CHECK_EQ(in_shape->size(), caffeOp_->blobs().size() + param_.num_data); - // Set weight shape - CHECK_EQ(param_.num_weight, caffeOp_->blobs().size()); - for (int i = 0; i < param_.num_weight ; ++i) { - mxnet::TShape tshape = caffe::Vector2mxnet::TShape(caffeOp_->blobs()[i]->shape()); - SHAPE_ASSIGN_CHECK(*in_shape, i + param_.num_data, tshape); - } - // Initialize out shapes - out_shape->clear(); - for (auto blob : top_blobs) { - mxnet::TShape tshape = caffe::Vector2mxnet::TShape(blob->shape()); - out_shape->push_back(tshape); - } - - for (auto blob_ptr : bot_blobs) - delete blob_ptr; - for (auto blob_ptr : top_blobs) - delete blob_ptr; - return true; - } - - OperatorProperty* Copy() const override { - auto copy_prop = new CaffeOpProp(); - copy_prop->param_ = this->param_; - return copy_prop; - } - - std::string TypeString() const override { - return "CaffeOp"; - } - - Operator* CreateOperator(Context ctx) const override { - LOG(FATAL) << "Not Implemented."; - return NULL; - } - - Operator* CreateOperatorEx(Context ctx, mxnet::ShapeVector *in_shape, - std::vector *in_type) const override; - - private: - mutable CaffeOpParam param_; - mutable ::caffe::Layer *caffeOp_; -}; // class CaffeOpSymbol -#endif - -} // namespace op -} // namespace mxnet -#endif // PLUGIN_CAFFE_CAFFE_OP_INL_H_ diff --git a/plugin/caffe/caffe_op.cc b/plugin/caffe/caffe_op.cc deleted file mode 100644 index db80f4a90f74..000000000000 --- a/plugin/caffe/caffe_op.cc +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_op.cc - * \brief caffe operator - * \author Haoran Wang -*/ -#include "./caffe_op-inl.h" -namespace mxnet { -namespace op { - -template<> -Operator* CreateOp(CaffeOpParam param, int dtype) { - Operator *op = NULL; - switch (dtype) { - case mshadow::kFloat32: - op = new CaffeOp(param); - break; - case mshadow::kFloat64: - op = new CaffeOp(param); - break; - case mshadow::kFloat16: - LOG(FATAL) << "float16 layer is not supported by caffe"; - break; - case mshadow::kBfloat16: - LOG(FATAL) << "bfloat16 layer is not supported by caffe"; - break; - default: - LOG(FATAL) << "Unsupported type " << dtype; - } - return op; -} - -// DO_BIND_DISPATCH comes from static_operator_common.h -Operator *CaffeOpProp::CreateOperatorEx(Context ctx, mxnet::ShapeVector *in_shape, - std::vector *in_type) const { - std::vector out_type, aux_type; - mxnet::ShapeVector out_shape, aux_shape; - out_type.resize(this->ListOutputs().size()); - out_shape.resize(this->ListOutputs().size()); - aux_type.resize(this->ListAuxiliaryStates().size()); - aux_shape.resize(this->ListAuxiliaryStates().size()); - CHECK(InferType(in_type, &out_type, &aux_type)); - CHECK(InferShape(in_shape, &out_shape, &aux_shape)); - DO_BIND_DISPATCH(CreateOp, param_, (*in_type)[0]); -} - -DMLC_REGISTER_PARAMETER(CaffeOpParam); - -MXNET_REGISTER_OP_PROPERTY(CaffeOp, CaffeOpProp) -.describe("Apply caffe operator") -.add_argument("data", "Symbol[]", "List of tensors") -.add_arguments(CaffeOpParam::__FIELDS__()); - -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_op.cu b/plugin/caffe/caffe_op.cu deleted file mode 100644 index 7d4017b33ad5..000000000000 --- a/plugin/caffe/caffe_op.cu +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_operator_gpu.cc - * \brief caffe operator - * \author Haoran Wang -*/ -#include "./caffe_op-inl.h" -namespace mxnet { -namespace op { - -template<> -Operator *CreateOp(CaffeOpParam param, int dtype) { - Operator *op = NULL; - switch (dtype) { - case mshadow::kFloat32: - op = new CaffeOp(param); - break; - case mshadow::kFloat64: - op = new CaffeOp(param); - break; - case mshadow::kFloat16: - LOG(FATAL) << "float16 layer is not supported by caffe"; - break; - case mshadow::kBfloat16: - LOG(FATAL) << "bfloat16 layer is not supported by caffe"; - break; - default: - LOG(FATAL) << "Unsupported type " << dtype; - } - return op; -} - -} // namespace op -} // namespace mxnet diff --git a/plugin/caffe/caffe_stream.h b/plugin/caffe/caffe_stream.h deleted file mode 100644 index 228e3727daed..000000000000 --- a/plugin/caffe/caffe_stream.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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) 2016 by Contributors - * \file caffe_stream.h - * \brief define stream opertors >> and << - * \author Haoran Wang -*/ -#ifndef PLUGIN_CAFFE_CAFFE_STREAM_H_ -#define PLUGIN_CAFFE_CAFFE_STREAM_H_ - -#include -#include -namespace dmlc { -namespace parameter { - std::istringstream &operator>>(std::istringstream &is, ::caffe::LayerParameter ¶_); - std::ostream &operator<<(std::ostream &os, ::caffe::LayerParameter ¶_); -} -} - -#endif // PLUGIN_CAFFE_CAFFE_STREAM_H_ diff --git a/python/mxnet/autograd.py b/python/mxnet/autograd.py index f968275a1390..aac7cbc21a17 100644 --- a/python/mxnet/autograd.py +++ b/python/mxnet/autograd.py @@ -28,6 +28,7 @@ from .ndarray import NDArray, _ndarray_cls from .ndarray import _GRAD_REQ_MAP from .symbol import Symbol +from .util import is_np_array def set_recording(is_recording): #pylint: disable=redefined-outer-name @@ -448,25 +449,30 @@ def __call__(self, *inputs): outputs = (outputs,) key = Function._registry.inc() + if is_np_array(): + from .numpy import ndarray + array_cls = ndarray + else: + array_cls = NDArray def backward_entry(num_ograds, num_igrads, ptrs, reqs, is_train, _): """entry point for backward.""" # pylint: disable=W0613 try: - output_grads = [NDArray(ctypes.cast(i, NDArrayHandle), writable=False) \ + output_grads = [array_cls(ctypes.cast(i, NDArrayHandle), writable=False) \ for i in ptrs[:num_ograds]] - input_grads = [NDArray(ctypes.cast(i, NDArrayHandle), writable=True) \ + input_grads = [array_cls(ctypes.cast(i, NDArrayHandle), writable=True) \ for i in ptrs[num_ograds:num_ograds+num_igrads]] reqs = [reqs[i] for i in range(num_igrads)] rets = self.backward(*output_grads) - if isinstance(rets, NDArray): + if isinstance(rets, array_cls): rets = (rets,) assert len(rets) == len(input_grads), \ "%s.backward must return exactly the same number " \ "of NDArrays as the number of NDArrays arguments to forward." \ "Expecting %d got %d"%(self.__class__.name, len(input_grads), len(rets)) for igrad, ret, req in zip(input_grads, rets, reqs): - assert isinstance(ret, NDArray), \ + assert isinstance(ret, array_cls), \ "autograd.Function.backward must return NDArrays, not %s"%type(ret) if req == 0: # null return True diff --git a/python/mxnet/base.py b/python/mxnet/base.py index 65687fff54a9..0b4bdf9a97c2 100644 --- a/python/mxnet/base.py +++ b/python/mxnet/base.py @@ -309,7 +309,6 @@ def _load_lib(): CudaModuleHandle = ctypes.c_void_p CudaKernelHandle = ctypes.c_void_p ProfileHandle = ctypes.c_void_p -DLPackHandle = ctypes.c_void_p #---------------------------- diff --git a/python/mxnet/contrib/onnx/onnx2mx/_op_translations.py b/python/mxnet/contrib/onnx/onnx2mx/_op_translations.py index 60ca44df387f..1bf60a02160b 100644 --- a/python/mxnet/contrib/onnx/onnx2mx/_op_translations.py +++ b/python/mxnet/contrib/onnx/onnx2mx/_op_translations.py @@ -289,14 +289,25 @@ def conv(attrs, inputs, proto_obj): no_bias = new_attrs['no_bias'] if 'no_bias' in new_attrs else 0 bias = None if no_bias is True else inputs[2] - # Unlike ONNX, MXNet's convolution operator does not support asymmetric padding, so we first - # use 'Pad' operator, which supports asymmetric padding. Then use the convolution operator. - pad_width = (0, 0, 0, 0) + translation_utils._pad_sequence_fix(padding, kernel_dim=len(kernel)) - pad_op = symbol.pad(inputs[0], mode='constant', pad_width=pad_width) - - conv_op = symbol.Convolution(pad_op, inputs[1], bias, - kernel=kernel, stride=stride, dilate=dilations, - num_filter=num_filter, num_group=num_group, no_bias=no_bias) + mxnet_pad = translation_utils._pad_sequence_fix(padding, kernel_dim=len(kernel)) + + left_pads = mxnet_pad[0::2] + right_pads = mxnet_pad[1::2] + is_pad_sym = left_pads == right_pads + + if not is_pad_sym: + # Unlike ONNX, MXNet's convolution operator does not support asymmetric padding, so we first + # use 'Pad' operator, which supports asymmetric padding. Then use the convolution operator. + pad_width = (0, 0, 0, 0) + mxnet_pad + pad_op = symbol.pad(inputs[0], mode='constant', pad_width=pad_width) + conv_op = symbol.Convolution(pad_op, inputs[1], bias, + kernel=kernel, stride=stride, dilate=dilations, + num_filter=num_filter, num_group=num_group, no_bias=no_bias) + else: + pad_width = left_pads + conv_op = symbol.Convolution(inputs[0], inputs[1], bias, + kernel=kernel, stride=stride, dilate=dilations, pad=pad_width, + num_filter=num_filter, num_group=num_group, no_bias=no_bias) return conv_op, new_attrs, inputs diff --git a/python/mxnet/dlpack.py b/python/mxnet/dlpack.py new file mode 100644 index 000000000000..b5e8ee83304e --- /dev/null +++ b/python/mxnet/dlpack.py @@ -0,0 +1,185 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +# coding: utf-8 +# pylint: disable=protected-access +# pylint: disable=import-error, no-name-in-module, undefined-variable + +"""DLPack API of MXNet.""" + +import ctypes +from .base import _LIB, c_str, check_call, NDArrayHandle + +DLPackHandle = ctypes.c_void_p + +PyCapsuleDestructor = ctypes.CFUNCTYPE(None, ctypes.c_void_p) +_c_str_dltensor = c_str('dltensor') +_c_str_used_dltensor = c_str('used_dltensor') + +def _dlpack_deleter(pycapsule): + pycapsule = ctypes.c_void_p(pycapsule) + if ctypes.pythonapi.PyCapsule_IsValid(pycapsule, _c_str_dltensor): + ptr = ctypes.c_void_p( + ctypes.pythonapi.PyCapsule_GetPointer(pycapsule, _c_str_dltensor)) + check_call(_LIB.MXNDArrayCallDLPackDeleter(ptr)) + +_c_dlpack_deleter = PyCapsuleDestructor(_dlpack_deleter) + +class DLContext(ctypes.Structure): + _fields_ = [("device_type", ctypes.c_int), + ("device_id", ctypes.c_int)] + +class DLDataType(ctypes.Structure): + _fields_ = [("type_code", ctypes.c_uint8), + ("bits", ctypes.c_uint8), + ("lanes", ctypes.c_uint16)] + TYPE_MAP = { + "int32": (0, 32, 1), + "int64": (0, 64, 1), + "bool": (1, 1, 1), + "uint8": (1, 8, 1), + "uint32": (1, 32, 1), + "uint64": (1, 64, 1), + 'float16': (2, 16, 1), + "float32": (2, 32, 1), + "float64": (2, 64, 1), + } + + +class DLTensor(ctypes.Structure): + _fields_ = [("data", ctypes.c_void_p), + ("ctx", DLContext), + ("ndim", ctypes.c_int), + ("dtype", DLDataType), + ("shape", ctypes.POINTER(ctypes.c_int64)), + ("strides", ctypes.POINTER(ctypes.c_int64)), + ("byte_offset", ctypes.c_uint64)] + +class DLManagedTensor(ctypes.Structure): + pass + + +DeleterFunc = ctypes.CFUNCTYPE(None, ctypes.POINTER(DLManagedTensor)) + + +DLManagedTensor._fields_ = [("dl_tensor", DLTensor), # pylint: disable=protected-access + ("manager_ctx", ctypes.c_void_p), + ("deleter", DeleterFunc)] + +@DeleterFunc +def dl_managed_tensor_deleter(dl_managed_tensor_handle): + void_p = dl_managed_tensor_handle.contents.manager_ctx + pyobj = ctypes.cast(void_p, ctypes.py_object) + ctypes.pythonapi.Py_DecRef(pyobj) + +def ndarray_from_dlpack(array_cls): + """Returns a function that returns specified array_cls from dlpack. + + Returns + ------- + fn : dlpack -> array_cls + """ + def from_dlpack(dlpack): + handle = NDArrayHandle() + dlpack = ctypes.py_object(dlpack) + assert ctypes.pythonapi.PyCapsule_IsValid(dlpack, _c_str_dltensor), ValueError( + 'Invalid DLPack Tensor. DLTensor capsules can be consumed only once.') + dlpack_handle = ctypes.c_void_p(ctypes.pythonapi.PyCapsule_GetPointer(dlpack, _c_str_dltensor)) + check_call(_LIB.MXNDArrayFromDLPackEx(dlpack_handle, False, ctypes.byref(handle))) + # Rename PyCapsule (DLPack) + ctypes.pythonapi.PyCapsule_SetName(dlpack, _c_str_used_dltensor) + # delete the deleter of the old dlpack + ctypes.pythonapi.PyCapsule_SetDestructor(dlpack, None) + return array_cls(handle=handle) + return from_dlpack + + +def ndarray_to_dlpack_for_read(): + """Returns a function that returns dlpack for reading from mxnet array. + + Returns + ------- + fn : tensor -> dlpack + """ + def to_dlpack_for_read(data): + data.wait_to_read() + dlpack = DLPackHandle() + check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) + return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) + return to_dlpack_for_read + +def ndarray_to_dlpack_for_write(): + """Returns a function that returns dlpack for writing from mxnet array. + + Returns + ------- + fn : tensor -> dlpack + """ + def to_dlpack_for_write(data): + + check_call(_LIB.MXNDArrayWaitToWrite(data.handle)) + dlpack = DLPackHandle() + check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) + return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) + return to_dlpack_for_write + +def ndarray_from_numpy(array_cls, array_create_fn): + """Returns a function that creates array_cls from numpy array. + + Returns + ------- + fn : tensor -> dlpack + """ + def from_numpy(ndarray, zero_copy=True): + def _make_manager_ctx(obj): + pyobj = ctypes.py_object(obj) + void_p = ctypes.c_void_p.from_buffer(pyobj) + ctypes.pythonapi.Py_IncRef(pyobj) + return void_p + + def _make_dl_tensor(array): + if str(array.dtype) not in DLDataType.TYPE_MAP: + raise ValueError(str(array.dtype) + " is not supported.") + dl_tensor = DLTensor() + dl_tensor.data = array.ctypes.data_as(ctypes.c_void_p) + dl_tensor.ctx = DLContext(1, 0) + dl_tensor.ndim = array.ndim + dl_tensor.dtype = DLDataType.TYPE_MAP[str(array.dtype)] + dl_tensor.shape = array.ctypes.shape_as(ctypes.c_int64) + dl_tensor.strides = None + dl_tensor.byte_offset = 0 + return dl_tensor + + def _make_dl_managed_tensor(array): + c_obj = DLManagedTensor() + c_obj.dl_tensor = _make_dl_tensor(array) + c_obj.manager_ctx = _make_manager_ctx(array) + c_obj.deleter = dl_managed_tensor_deleter + return c_obj + + if not zero_copy: + return array_create_fn(ndarray, dtype=ndarray.dtype) + + if not ndarray.flags['C_CONTIGUOUS']: + raise ValueError("Only c-contiguous arrays are supported for zero-copy") + + ndarray.flags['WRITEABLE'] = False + c_obj = _make_dl_managed_tensor(ndarray) + handle = NDArrayHandle() + check_call(_LIB.MXNDArrayFromDLPackEx(ctypes.byref(c_obj), True, ctypes.byref(handle))) + return array_cls(handle=handle) + return from_numpy diff --git a/python/mxnet/gluon/loss.py b/python/mxnet/gluon/loss.py index 852a9a791d53..bc447b0f1c55 100644 --- a/python/mxnet/gluon/loss.py +++ b/python/mxnet/gluon/loss.py @@ -74,6 +74,26 @@ def _reshape_like(F, x, y): return F.reshape_like(x, y) +def _batch_mean(F, loss, batch_axis): + """Return mean on the specified batch axis, not keeping the axis""" + if is_np_array(): + axes = list(range(loss.ndim)) + del axes[batch_axis] + return F.np.mean(loss, axis=axes) + else: + return F.mean(loss, axis=batch_axis, exclude=True) + +def _batch_sum(F, loss, batch_axis): + """Return sum on the specified batch axis, not keeping the axis""" + if is_np_array(): + axes = list(range(loss.ndim)) + del axes[batch_axis] + return F.np.sum(loss, axis=axes) + else: + return F.sum(loss, axis=batch_axis, exclude=True) + + + class Loss(HybridBlock): """Base class for loss. @@ -142,16 +162,11 @@ def __init__(self, weight=1., batch_axis=0, **kwargs): super(L2Loss, self).__init__(weight, batch_axis, **kwargs) def hybrid_forward(self, F, pred, label, sample_weight=None): + square_fn = F.np.square if is_np_array() else F.square label = _reshape_like(F, label, pred) - loss = F.np.square(label - pred) if is_np_array() else F.square(label - pred) + loss = square_fn(label - pred) loss = _apply_weighting(F, loss, self._weight / 2, sample_weight) - if is_np_array(): - if F is ndarray: - return F.np.mean(loss, axis=tuple(range(1, loss.ndim))) - else: - return F.npx.batch_flatten(loss).mean(axis=1) - else: - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class L1Loss(Loss): @@ -187,16 +202,11 @@ def __init__(self, weight=None, batch_axis=0, **kwargs): super(L1Loss, self).__init__(weight, batch_axis, **kwargs) def hybrid_forward(self, F, pred, label, sample_weight=None): + abs_fn = F.np.abs if is_np_array() else F.abs label = _reshape_like(F, label, pred) - loss = F.np.abs(label - pred) if is_np_array() else F.abs(label - pred) + loss = abs_fn(label - pred) loss = _apply_weighting(F, loss, self._weight, sample_weight) - if is_np_array(): - if F is ndarray: - return F.np.mean(loss, axis=tuple(range(1, loss.ndim))) - else: - return F.npx.batch_flatten(loss).mean(axis=1) - else: - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class SigmoidBinaryCrossEntropyLoss(Loss): @@ -262,7 +272,6 @@ def __init__(self, from_sigmoid=False, weight=None, batch_axis=0, **kwargs): self._from_sigmoid = from_sigmoid def hybrid_forward(self, F, pred, label, sample_weight=None, pos_weight=None): - label = _reshape_like(F, label, pred) if is_np_array(): relu_fn = F.npx.relu act_fn = F.npx.activation @@ -275,6 +284,7 @@ def hybrid_forward(self, F, pred, label, sample_weight=None, pos_weight=None): abs_fn = F.abs mul_fn = F.broadcast_mul log_fn = F.log + label = _reshape_like(F, label, pred) if not self._from_sigmoid: if pos_weight is None: # We use the stable formula: max(x, 0) - x * z + log(1 + exp(-abs(x))) @@ -295,13 +305,7 @@ def hybrid_forward(self, F, pred, label, sample_weight=None, pos_weight=None): loss = -(mul_fn(log_fn(pred + eps) * label, pos_weight) + log_fn(1. - pred + eps) * (1. - label)) loss = _apply_weighting(F, loss, self._weight, sample_weight) - if is_np_array(): - if F is ndarray: - return F.np.mean(loss, axis=tuple(range(1, loss.ndim))) - else: - return F.npx.batch_flatten(loss).mean(axis=1) - else: - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) SigmoidBCELoss = SigmoidBinaryCrossEntropyLoss @@ -379,26 +383,20 @@ def __init__(self, axis=-1, sparse_label=True, from_logits=False, weight=None, def hybrid_forward(self, F, pred, label, sample_weight=None): if is_np_array(): - log_softmax = F.npx.log_softmax - pick = F.npx.pick + log_softmax_fn = F.npx.log_softmax + pick_fn = F.npx.pick else: - log_softmax = F.log_softmax - pick = F.pick + log_softmax_fn = F.log_softmax + pick_fn = F.pick if not self._from_logits: - pred = log_softmax(pred, self._axis) + pred = log_softmax_fn(pred, self._axis) if self._sparse_label: - loss = -pick(pred, label, axis=self._axis, keepdims=True) + loss = -pick_fn(pred, label, axis=self._axis, keepdims=True) else: label = _reshape_like(F, label, pred) loss = -(pred * label).sum(axis=self._axis, keepdims=True) loss = _apply_weighting(F, loss, self._weight, sample_weight) - if is_np_array(): - if F is ndarray: - return loss.mean(axis=tuple(range(1, loss.ndim))) - else: - return F.npx.batch_flatten(loss).mean(axis=1) - else: - return loss.mean(axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) SoftmaxCELoss = SoftmaxCrossEntropyLoss @@ -472,11 +470,17 @@ def __init__(self, from_logits=True, axis=-1, weight=None, batch_axis=0, self._axis = axis def hybrid_forward(self, F, pred, label, sample_weight=None): + if is_np_array(): + log_softmax_fn = F.npx.log_softmax + log_fn = F.np.log + else: + log_softmax_fn = F.log_softmax + log_fn = F.log if not self._from_logits: - pred = F.log_softmax(pred, self._axis) - loss = label * (F.log(label + 1e-12) - pred) + pred = log_softmax_fn(pred, self._axis) + loss = label * (log_fn(label + 1e-12) - pred) loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.sum(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class CTCLoss(Loss): @@ -549,14 +553,20 @@ def __init__(self, layout='NTC', label_layout='NT', weight=None, **kwargs): def hybrid_forward(self, F, pred, label, pred_lengths=None, label_lengths=None, sample_weight=None): + if is_np_array(): + swapaxes_fn = F.np.swapaxes + ctc_fn = F.npx.ctc_loss + else: + swapaxes_fn = F.swapaxes + ctc_fn = F.ctc_loss if self._layout == 'NTC': - pred = F.swapaxes(pred, 0, 1) + pred = swapaxes_fn(pred, 0, 1) if self._batch_axis == 1: - label = F.swapaxes(label, 0, 1) - loss = F.CTCLoss(pred, label, pred_lengths, label_lengths, - use_data_lengths=pred_lengths is not None, - use_label_lengths=label_lengths is not None, - blank_label='last') + label = swapaxes_fn(label, 0, 1) + loss = ctc_fn(pred, label, pred_lengths, label_lengths, + use_data_lengths=pred_lengths is not None, + use_label_lengths=label_lengths is not None, + blank_label='last') return _apply_weighting(F, loss, self._weight, sample_weight) @@ -602,12 +612,20 @@ def __init__(self, rho=1, weight=None, batch_axis=0, **kwargs): self._rho = rho def hybrid_forward(self, F, pred, label, sample_weight=None): + if is_np_array(): + abs_fn = F.np.abs + where_fn = F.np.where + square_fn = F.np.square + else: + abs_fn = F.abs + where_fn = F.where + square_fn = F.square label = _reshape_like(F, label, pred) - loss = F.abs(label - pred) - loss = F.where(loss > self._rho, loss - 0.5 * self._rho, - (0.5 / self._rho) * F.square(loss)) + loss = abs_fn(label - pred) + loss = where_fn(loss > self._rho, loss - 0.5 * self._rho, + (0.5 / self._rho) * square_fn(loss)) loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class HingeLoss(Loss): @@ -649,10 +667,11 @@ def __init__(self, margin=1, weight=None, batch_axis=0, **kwargs): self._margin = margin def hybrid_forward(self, F, pred, label, sample_weight=None): + relu_fn = F.npx.relu if is_np_array() else F.relu label = _reshape_like(F, label, pred) - loss = F.relu(self._margin - pred * label) + loss = relu_fn(self._margin - pred * label) loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class SquaredHingeLoss(Loss): @@ -694,10 +713,16 @@ def __init__(self, margin=1, weight=None, batch_axis=0, **kwargs): self._margin = margin def hybrid_forward(self, F, pred, label, sample_weight=None): + if is_np_array(): + relu_fn = F.npx.relu + square_fn = F.np.square + else: + relu_fn = F.relu + square_fn = F.square label = _reshape_like(F, label, pred) - loss = F.square(F.relu(self._margin - pred * label)) + loss = square_fn(relu_fn(self._margin - pred * label)) loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class LogisticLoss(Loss): @@ -743,14 +768,22 @@ def __init__(self, weight=None, batch_axis=0, label_format='signed', **kwargs): % label_format) def hybrid_forward(self, F, pred, label, sample_weight=None): + if is_np_array(): + relu_fn = F.npx.relu + act_fn = F.npx.activation + abs_fn = F.np.abs + else: + relu_fn = F.relu + act_fn = F.Activation + abs_fn = F.abs label = _reshape_like(F, label, pred) if self._label_format == 'signed': label = (label + 1.0) / 2.0 # Transform label to be either 0 or 1 # Use a stable formula in computation - loss = F.relu(pred) - pred * label + \ - F.Activation(-F.abs(pred), act_type='softrelu') + loss = relu_fn(pred) - pred * label + \ + act_fn(-abs_fn(pred), act_type='softrelu') loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.mean(loss, axis=self._batch_axis, exclude=True) + return _batch_mean(F, loss, self._batch_axis) class TripletLoss(Loss): @@ -790,13 +823,18 @@ def __init__(self, margin=1, weight=None, batch_axis=0, **kwargs): super(TripletLoss, self).__init__(weight, batch_axis, **kwargs) self._margin = margin - def hybrid_forward(self, F, pred, positive, negative): + def hybrid_forward(self, F, pred, positive, negative, sample_weight=None): + if is_np_array(): + relu_fn = F.npx.relu + square_fn = F.np.square + else: + relu_fn = F.relu + square_fn = F.square positive = _reshape_like(F, positive, pred) negative = _reshape_like(F, negative, pred) - loss = F.sum(F.square(positive - pred) - F.square(negative - pred), - axis=self._batch_axis, exclude=True) - loss = F.relu(loss + self._margin) - return _apply_weighting(F, loss, self._weight, None) + loss = _batch_sum(F, square_fn(positive - pred) - square_fn(negative - pred), self._batch_axis) + loss = relu_fn(loss + self._margin) + return _apply_weighting(F, loss, self._weight, sample_weight) class PoissonNLLLoss(Loss): @@ -845,20 +883,26 @@ def __init__(self, weight=None, from_logits=True, batch_axis=0, compute_full=Fal self._compute_full = compute_full def hybrid_forward(self, F, pred, target, sample_weight=None, epsilon=1e-08): + if is_np_array(): + exp_fn = F.np.exp + log_fn = F.np.log + else: + exp_fn = F.exp + log_fn = F.log target = _reshape_like(F, target, pred) if self._from_logits: - loss = F.exp(pred) - target * pred + loss = exp_fn(pred) - target * pred else: - loss = pred - target * F.log(pred + epsilon) + loss = pred - target * log_fn(pred + epsilon) if self._compute_full: # Using numpy's pi value stirling_factor = target * \ - F.log(target) - target + 0.5 * F.log(2 * target * np.pi) + log_fn(target) - target + 0.5 * log_fn(2 * target * np.pi) target_gt_1 = target > 1 stirling_factor *= target_gt_1 loss += stirling_factor loss = _apply_weighting(F, loss, self._weight, sample_weight) - return F.mean(loss) + return _batch_mean(F, loss, self._batch_axis) class CosineEmbeddingLoss(Loss): @@ -902,33 +946,42 @@ def __init__(self, weight=None, batch_axis=0, margin=0, **kwargs): self._margin = margin def hybrid_forward(self, F, input1, input2, label, sample_weight=None): + if is_np_array(): + where_fn = F.np.where + clip_fn = F.np.clip + else: + where_fn = F.where + clip_fn = F.clip + input1 = _reshape_like(F, input1, input2) - label = label.reshape((-1, 1)) cos_sim = self._cosine_similarity(F, input1, input2) - y_1 = label == 1 - y_minus_1 = label == -1 - cos_sim_a = (1 - cos_sim) * y_1 + label = _reshape_like(F, label, cos_sim) + loss = where_fn(label == 1, + 1 - cos_sim, + clip_fn(cos_sim - self._margin, 0, 1 - self._margin)) - if F is ndarray: - z_array = F.array([0]) - else: - z_array = F.zeros((1, 1)) - cos_sim_b = F.broadcast_maximum( - z_array, y_minus_1 * (cos_sim - self._margin), axis=1) - loss = cos_sim_a + cos_sim_b loss = _apply_weighting(F, loss, self._weight, sample_weight) - return loss + return _batch_mean(F, loss, self._batch_axis) def _cosine_similarity(self, F, x, y, axis=-1): - # Calculates the cosine similarity between 2 vectors - x_norm = F.norm(x, axis=axis).reshape((-1, 1)) - y_norm = F.norm(y, axis=axis).reshape((-1, 1)) - x_dot_y = F.sum(x * y, axis=axis).reshape((-1, 1)) - if F is ndarray: - eps_arr = F.array([1e-12]) + if is_np_array(): + reshape_fn = F.npx.reshape + norm_fn = F.npx.norm + sum_fn = F.np.sum + full_fn = F.np.full + max_fn = F.np.maximum else: - eps_arr = F.full((1, 1), 1e-12) - return (x_dot_y / F.broadcast_maximum(x_norm * y_norm, eps_arr)) + reshape_fn = F.reshape + norm_fn = F.norm + sum_fn = F.sum + full_fn = F.full + max_fn = F.broadcast_maximum + # Calculates the cosine similarity between 2 vectors + x_norm = reshape_fn(norm_fn(x, axis=axis), (-1, 1)) + y_norm = reshape_fn(norm_fn(y, axis=axis), (-1, 1)) + x_dot_y = reshape_fn(sum_fn(x * y, axis=axis), (-1, 1)) + eps_arr = full_fn((1, 1), 1e-12) + return (x_dot_y / max_fn(x_norm * y_norm, eps_arr)) class SDMLLoss(Loss): @@ -972,18 +1025,24 @@ def __init__(self, smoothing_parameter=0.3, weight=1., batch_axis=0, **kwargs): self.kl_loss = KLDivLoss(from_logits=True) self.smoothing_parameter = smoothing_parameter # Smoothing probability mass - def _compute_distances(self, x1, x2): + def _compute_distances(self, F, x1, x2): """ This function computes the euclidean distance between every vector in the two batches in input. """ + if is_np_array(): + expand_dims_fn = F.np.expand_dims + broadcast_to_fn = F.np.broadcast_to + else: + expand_dims_fn = F.expand_dims + broadcast_to_fn = F.broadcast_to # extracting sizes expecting [batch_size, dim] assert x1.shape == x2.shape batch_size, dim = x1.shape # expanding both tensor form [batch_size, dim] to [batch_size, batch_size, dim] - x1_ = x1.expand_dims(1).broadcast_to([batch_size, batch_size, dim]) - x2_ = x2.expand_dims(0).broadcast_to([batch_size, batch_size, dim]) + x1_ = broadcast_to_fn(expand_dims_fn(x1, 1), [batch_size, batch_size, dim]) + x2_ = broadcast_to_fn(expand_dims_fn(x2, 0), [batch_size, batch_size, dim]) # pointwise squared differences squared_diffs = (x1_ - x2_)**2 # sum of squared differences distance @@ -1015,7 +1074,7 @@ def _compute_labels(self, F, batch_size): return labels - def _loss(self, F, x1, x2): + def hybrid_forward(self, F, x1, x2): """ the function computes the kl divergence between the negative distances (internally it compute a softmax casting into probabilities) and the @@ -1033,15 +1092,15 @@ def _loss(self, F, x1, x2): learn to predict french president comparing it with all the other vectors in batch 2 """ + if is_np_array(): + log_softmax_fn = F.npx.log_softmax + else: + log_softmax_fn = F.log_softmax batch_size = x1.shape[0] labels = self._compute_labels(F, batch_size) - distances = self._compute_distances(x1, x2) - log_probabilities = F.log_softmax(-distances, axis=1) + distances = self._compute_distances(F, x1, x2) + log_probabilities = log_softmax_fn(-distances, axis=1) # multiply for the number of labels to obtain the correct loss (gluon kl_loss averages instead of sum) # PR#18423:multiply for the number of labels should multiply x1.shape[1] rather than x1.shape[0]) # After PR#18423, it is no need to multiply it anymore. return self.kl_loss(log_probabilities, labels.as_in_context(distances.context)) - - - def hybrid_forward(self, F, x1, x2): - return self._loss(F, x1, x2) diff --git a/python/mxnet/gluon/metric.py b/python/mxnet/gluon/metric.py index 5b081ceac4d8..766a95a4d6db 100644 --- a/python/mxnet/gluon/metric.py +++ b/python/mxnet/gluon/metric.py @@ -1352,9 +1352,12 @@ class :math:`k`. Index of invalid label to ignore when counting. By default, sets to -1. If set to `None`, it will include all entries. - axis : int (default -1) + axis : int, default -1 The axis from prediction that was used to compute softmax. By default use the last axis. + from_logits : boolean, default False + Whether `pred` is expected to be a logits tensor. + By default, we assume that `pred` encodes a probability distribution. name : str Name of this metric instance for display. output_names : list of str, or None @@ -1373,12 +1376,13 @@ class :math:`k`. >>> print ce.get() ('cross-entropy', 0.57159948348999023) """ - def __init__(self, eps=1e-12, ignore_label=None, axis=-1, name='cross-entropy', - output_names=None, label_names=None): + def __init__(self, eps=1e-12, ignore_label=None, axis=-1, from_logits=False, + name='cross-entropy', output_names=None, label_names=None): super(CrossEntropy, self).__init__( name, output_names=output_names, label_names=label_names) self.ignore_label = ignore_label self.axis = axis + self.from_logits = from_logits self.eps = eps def update(self, labels, preds): @@ -1400,6 +1404,8 @@ def update(self, labels, preds): assert label.size == pred.size/pred.shape[-1], \ "shape mismatch: %s vs. %s"%(label.shape, pred.shape) label = label.reshape((label.size,)) + if self.from_logits: + pred = ndarray.softmax(pred, axis=self.axis) pred = ndarray.pick(pred.as_in_context(label.ctx), label.astype(dtype='int32'), axis=self.axis) label = label.as_np_ndarray() pred = pred.as_np_ndarray() @@ -1469,11 +1475,11 @@ class Perplexity(CrossEntropy): >>> print perp.get() ('Perplexity', 1.7710976285155853) """ - def __init__(self, eps=1e-12, ignore_label=None, axis=-1, name='perplexity', - output_names=None, label_names=None): + def __init__(self, eps=1e-12, ignore_label=None, axis=-1, from_logits=False, + name='perplexity', output_names=None, label_names=None): super(Perplexity, self).__init__( - name=name, eps=eps, ignore_label=ignore_label, axis=axis, - output_names=output_names, label_names=label_names) + eps=eps, ignore_label=ignore_label, axis=axis, from_logits=from_logits, + name=name, output_names=output_names, label_names=label_names) def get(self): if self.num_inst == 0: @@ -1482,77 +1488,6 @@ def get(self): return (self.name, math.exp(self.sum_metric/self.num_inst)) -@register -@alias('nll_loss') -@use_np -class NegativeLogLikelihood(EvalMetric): - """Computes the negative log-likelihood loss. - - The negative log-likelihoodd loss over a batch of sample size :math:`N` is given by - - .. math:: - -\\sum_{n=1}^{N}\\sum_{k=1}^{K}t_{nk}\\log (y_{nk}), - - where :math:`K` is the number of classes, :math:`y_{nk}` is the prediceted probability for - :math:`k`-th class for :math:`n`-th sample. :math:`t_{nk}=1` if and only if sample - :math:`n` belongs to class :math:`k`. - - Parameters - ---------- - eps : float - Negative log-likelihood loss is undefined for predicted value is 0, - so predicted values are added with the small constant. - name : str - Name of this metric instance for display. - output_names : list of str, or None - Name of predictions that should be used when updating with update_dict. - By default include all predictions. - label_names : list of str, or None - Name of labels that should be used when updating with update_dict. - By default include all labels. - - Examples - -------- - >>> predicts = [mx.nd.array([[0.3, 0.7], [0, 1.], [0.4, 0.6]])] - >>> labels = [mx.nd.array([0, 1, 1])] - >>> nll_loss = mx.gluon.metric.NegativeLogLikelihood() - >>> nll_loss.update(labels, predicts) - >>> print nll_loss.get() - ('nll-loss', 0.57159948348999023) - """ - def __init__(self, eps=1e-12, name='nll-loss', - output_names=None, label_names=None): - super(NegativeLogLikelihood, self).__init__( - name, eps=eps, - output_names=output_names, label_names=label_names) - self.eps = eps - - def update(self, labels, preds): - """Updates the internal evaluation result. - - Parameters - ---------- - labels : list of `NDArray` - The labels of the data. - - preds : list of `NDArray` - Predicted values. - """ - labels, preds = check_label_shapes(labels, preds, True) - - for label, pred in zip(labels, preds): - label = label.as_np_ndarray() - pred = pred.as_np_ndarray().as_in_ctx(label.ctx) - - label = label.reshape(-1) - num_examples = pred.shape[0] - assert label.shape[0] == num_examples, (label.shape[0], num_examples) - prob = pred[numpy.arange(num_examples, dtype=numpy.int64), numpy.int64(label)] - nll = (-numpy.log(prob + self.eps)).sum() - self.sum_metric += nll - self.num_inst += num_examples - - @register @alias('pearsonr') @use_np @@ -1804,15 +1739,6 @@ def __init__(self, name='torch', name, output_names=output_names, label_names=label_names) -@register -class Caffe(Loss): - """Dummy metric for caffe criterions.""" - def __init__(self, name='caffe', - output_names=None, label_names=None): - super(Caffe, self).__init__( - name, output_names=output_names, label_names=label_names) - - @register @use_np class CustomMetric(EvalMetric): diff --git a/python/mxnet/gluon/nn/basic_layers.py b/python/mxnet/gluon/nn/basic_layers.py index 0f035eec31d3..ff6bc18551a5 100644 --- a/python/mxnet/gluon/nn/basic_layers.py +++ b/python/mxnet/gluon/nn/basic_layers.py @@ -154,7 +154,7 @@ class Dense(HybridBlock): r"""Just your regular densely-connected NN layer. `Dense` implements the operation: - `output = activation(dot(input, weight) + bias)` + `output = activation(dot(input, weight.T) + bias)` where `activation` is the element-wise activation function passed as the `activation` argument, `weight` is a weights matrix created by the layer, and `bias` is a bias vector created by the layer diff --git a/python/mxnet/gluon/parameter.py b/python/mxnet/gluon/parameter.py index 4d1efdc9fe65..2f1f1152a4c2 100644 --- a/python/mxnet/gluon/parameter.py +++ b/python/mxnet/gluon/parameter.py @@ -662,6 +662,7 @@ def cast(self, dtype): The new data type. """ self._dtype = dtype + self._var = None # Clear Symbol Variable as it caches the dtype if self._data is None: return with autograd.pause(): diff --git a/python/mxnet/library.py b/python/mxnet/library.py index e0c60d4588f9..9ce3f7b2223e 100644 --- a/python/mxnet/library.py +++ b/python/mxnet/library.py @@ -72,3 +72,15 @@ def load(path, verbose=True): for op in dir(mx_sym_op): func = getattr(mx_sym_op, op) setattr(mx_sym, op, func) + +def compiled_with_cxx11_abi(): + """Check if the library is compiled with cxx11 ABI. + + Returns + ------- + bool + Whether the library is compiled with cxx11 ABI. + """ + ret = ctypes.c_bool() + check_call(_LIB.MXLibInfoCompiledWithCXX11ABI(ctypes.byref(ret))) + return ret.value diff --git a/python/mxnet/ndarray/ndarray.py b/python/mxnet/ndarray/ndarray.py index 9cc8b8942c1d..fa26dfff9628 100644 --- a/python/mxnet/ndarray/ndarray.py +++ b/python/mxnet/ndarray/ndarray.py @@ -34,9 +34,11 @@ from functools import reduce # pylint: disable=redefined-builtin import numpy as np from ..base import _LIB, numeric_types, integer_types -from ..base import c_str, c_array, c_array_buf, c_handle_array, mx_real_t -from ..base import mx_uint, NDArrayHandle, check_call, DLPackHandle, mx_int, mx_int64 +from ..base import c_array, c_array_buf, c_handle_array, mx_real_t +from ..base import mx_uint, NDArrayHandle, check_call, mx_int, mx_int64 from ..base import ctypes2buffer +from ..dlpack import ndarray_to_dlpack_for_read, ndarray_to_dlpack_for_write +from ..dlpack import ndarray_from_dlpack, ndarray_from_numpy from ..runtime import Features from ..context import Context, current_context from ..util import is_np_array @@ -70,9 +72,28 @@ np.int8: 5, np.int64: 6, np.bool_: 7, + np.int16: 8, + np.uint16 : 9, + np.uint32 : 10, + np.uint64 : 11, np.dtype([('bfloat16', np.uint16)]): 12, } +def _register_platform_dependent_mx_dtype(): + """Register platform dependent types to the fixed size counterparts.""" + kind_map = {'i': 'int', 'u': 'uint', 'f': 'float'} + for np_type in [ + np.byte, np.ubyte, np.short, np.ushort, np.intc, np.uintc, np.int_, + np.uint, np.longlong, np.ulonglong, np.half, np.float16, np.single, + np.double, np.longdouble]: + dtype = np.dtype(np_type) + kind, size = dtype.kind, dtype.itemsize + bits = size * 8 + fixed_dtype = getattr(np, kind_map[kind]+str(bits)) + if fixed_dtype in _DTYPE_NP_TO_MX: + _DTYPE_NP_TO_MX[np_type] = _DTYPE_NP_TO_MX[fixed_dtype] +_register_platform_dependent_mx_dtype() + _DTYPE_MX_TO_NP = { -1: None, 0: np.float32, @@ -83,6 +104,10 @@ 5: np.int8, 6: np.int64, 7: np.bool_, + 8: np.int16, + 9: np.uint16, + 10: np.uint32, + 11: np.uint64, 12: np.dtype([('bfloat16', np.uint16)]), } @@ -4914,32 +4939,18 @@ def split_v2(ary, indices_or_sections, axis=0, squeeze_axis=False): raise ValueError('indices_or_sections must either int or tuple of ints') return _internal._split_v2(ary, indices, axis, squeeze_axis) -PyCapsuleDestructor = ctypes.CFUNCTYPE(None, ctypes.c_void_p) -_c_str_dltensor = c_str('dltensor') -_c_str_used_dltensor = c_str('used_dltensor') - -def _dlpack_deleter(pycapsule): - pycapsule = ctypes.c_void_p(pycapsule) - if ctypes.pythonapi.PyCapsule_IsValid(pycapsule, _c_str_dltensor): - ptr = ctypes.c_void_p( - ctypes.pythonapi.PyCapsule_GetPointer(pycapsule, _c_str_dltensor)) - check_call(_LIB.MXNDArrayCallDLPackDeleter(ptr)) - -_c_dlpack_deleter = PyCapsuleDestructor(_dlpack_deleter) - -def to_dlpack_for_read(data): - """Returns a reference view of NDArray that represents as DLManagedTensor until - all previous write operations on the current array are finished. +from_dlpack = ndarray_from_dlpack(NDArray) +from_dlpack_doc = """Returns a NDArray backed by a dlpack tensor. Parameters ---------- - data: NDArray - input data. + dlpack: PyCapsule (the pointer of DLManagedTensor) + input data Returns ------- - PyCapsule (the pointer of DLManagedTensor) - a reference view of NDArray that represents as DLManagedTensor. + NDArray + a NDArray backed by a dlpack tensor Examples -------- @@ -4948,33 +4959,13 @@ def to_dlpack_for_read(data): >>> type(y) >>> z = mx.nd.from_dlpack(y) + >>> type(z) + >>> z - [[1. 1. 1.] - [1. 1. 1.]] + [[ 1. 1. 1.] + [ 1. 1. 1.]] - """ - data.wait_to_read() - dlpack = DLPackHandle() - check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) - return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) - -def to_dlpack_for_write(data): - """Returns a reference view of NDArray that represents as DLManagedTensor until - all previous read/write operations on the current array are finished. - Parameters - ---------- - data: NDArray - input data. - - Returns - ------- - PyCapsule (the pointer of DLManagedTensor) - a reference view of NDArray that represents as DLManagedTensor. - - Examples - -------- - >>> x = mx.nd.ones((2,3)) >>> w = mx.nd.to_dlpack_for_write(x) >>> type(w) @@ -4985,23 +4976,45 @@ def to_dlpack_for_write(data): [2. 2. 2.]] """ - check_call(_LIB.MXNDArrayWaitToWrite(data.handle)) - dlpack = DLPackHandle() - check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) - return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) +from_dlpack.__doc__ = from_dlpack_doc -def from_dlpack(dlpack): - """Returns a NDArray backed by a dlpack tensor. +from_numpy = ndarray_from_numpy(NDArray, array) +from_numpy_doc = """Returns an MXNet's NDArray backed by numpy's ndarray. + When `zero_copy` is set to be true, + this API consumes numpy's ndarray and produces MXNet's ndarray + without having to copy the content. In this case, we disallow + users to modify the given numpy ndarray, and it is suggested + not to read the numpy ndarray as well for internal correctness. Parameters ---------- - dlpack: PyCapsule (the pointer of DLManagedTensor) + ndarray: NDArray input data + zero_copy: bool + Whether we use DLPack's zero-copy conversion to convert to MXNet's NDArray. + This is only available for c-contiguous arrays, i.e. array.flags[C_CONTIGUOUS] == True. Returns ------- NDArray a NDArray backed by a dlpack tensor +""" +from_numpy.__doc__ = from_numpy_doc + + +to_dlpack_for_read = ndarray_to_dlpack_for_read() +to_dlpack_for_read_doc = """Returns a reference view of NDArray that represents as DLManagedTensor until + all previous write operations on the current array are finished. + + Parameters + ---------- + data: NDArray + input data. + + Returns + ------- + PyCapsule (the pointer of DLManagedTensor) + a reference view of NDArray that represents as DLManagedTensor. Examples -------- @@ -5010,13 +5023,30 @@ def from_dlpack(dlpack): >>> type(y) >>> z = mx.nd.from_dlpack(y) - >>> type(z) - >>> z - [[ 1. 1. 1.] - [ 1. 1. 1.]] + [[1. 1. 1.] + [1. 1. 1.]] +""" +to_dlpack_for_read.__doc__ = to_dlpack_for_read_doc + +to_dlpack_for_write = ndarray_to_dlpack_for_write() +to_dlpack_for_write_doc = """Returns a reference view of NDArray that represents as +DLManagedTensor until all previous read/write operations on the current array are finished. + + Parameters + ---------- + data: NDArray + input data. + + Returns + ------- + PyCapsule (the pointer of DLManagedTensor) + a reference view of NDArray that represents as DLManagedTensor. + Examples + -------- + >>> x = mx.nd.ones((2,3)) >>> w = mx.nd.to_dlpack_for_write(x) >>> type(w) @@ -5026,128 +5056,5 @@ def from_dlpack(dlpack): [[2. 2. 2.] [2. 2. 2.]] - """ - handle = NDArrayHandle() - dlpack = ctypes.py_object(dlpack) - assert ctypes.pythonapi.PyCapsule_IsValid(dlpack, _c_str_dltensor), ValueError( - 'Invalid DLPack Tensor. DLTensor capsules can be consumed only once.') - dlpack_handle = ctypes.c_void_p(ctypes.pythonapi.PyCapsule_GetPointer(dlpack, _c_str_dltensor)) - check_call(_LIB.MXNDArrayFromDLPackEx(dlpack_handle, False, ctypes.byref(handle))) - # Rename PyCapsule (DLPack) - ctypes.pythonapi.PyCapsule_SetName(dlpack, _c_str_used_dltensor) - # delete the deleter of the old dlpack - ctypes.pythonapi.PyCapsule_SetDestructor(dlpack, None) - return NDArray(handle=handle) - -class DLContext(ctypes.Structure): - _fields_ = [("device_type", ctypes.c_int), - ("device_id", ctypes.c_int)] - - -class DLDataType(ctypes.Structure): - _fields_ = [("type_code", ctypes.c_uint8), - ("bits", ctypes.c_uint8), - ("lanes", ctypes.c_uint16)] - TYPE_MAP = { - "int32": (0, 32, 1), - "int64": (0, 64, 1), - "bool": (1, 1, 1), - "uint8": (1, 8, 1), - "uint32": (1, 32, 1), - "uint64": (1, 64, 1), - 'float16': (2, 16, 1), - "float32": (2, 32, 1), - "float64": (2, 64, 1), - } - - -class DLTensor(ctypes.Structure): - _fields_ = [("data", ctypes.c_void_p), - ("ctx", DLContext), - ("ndim", ctypes.c_int), - ("dtype", DLDataType), - ("shape", ctypes.POINTER(ctypes.c_int64)), - ("strides", ctypes.POINTER(ctypes.c_int64)), - ("byte_offset", ctypes.c_uint64)] - -class DLManagedTensor(ctypes.Structure): - pass - - -DeleterFunc = ctypes.CFUNCTYPE(None, ctypes.POINTER(DLManagedTensor)) - - -DLManagedTensor._fields_ = [("dl_tensor", DLTensor), # pylint: disable=protected-access - ("manager_ctx", ctypes.c_void_p), - ("deleter", DeleterFunc)] - - -@DeleterFunc -def dl_managed_tensor_deleter(dl_managed_tensor_handle): - void_p = dl_managed_tensor_handle.contents.manager_ctx - pyobj = ctypes.cast(void_p, ctypes.py_object) - ctypes.pythonapi.Py_DecRef(pyobj) - - -def from_numpy(ndarray, zero_copy=True, array_cls=NDArray): - """Returns an MXNet's ndarray backed by numpy's ndarray. - When `zero_copy` is set to be true, - this API consumes numpy's ndarray and produces MXNet's ndarray - without having to copy the content. In this case, we disallow - users to modify the given numpy ndarray, and it is suggested - not to read the numpy ndarray as well for internal correctness. - - Parameters - ---------- - ndarray: numpy.ndarray - input data - zero_copy: bool - Whether we use DLPack's zero-copy conversion to convert to MXNet's NDArray. - This is only available for c-contiguous arrays, i.e. array.flags[C_CONTIGUOUS] == True. - array_cls: ndarray class type - The class type of the output array. - - Returns - ------- - NDArray - a NDArray backed by a dlpack tensor - - """ - - def _make_manager_ctx(obj): - pyobj = ctypes.py_object(obj) - void_p = ctypes.c_void_p.from_buffer(pyobj) - ctypes.pythonapi.Py_IncRef(pyobj) - return void_p - - def _make_dl_tensor(array): - if str(array.dtype) not in DLDataType.TYPE_MAP: - raise ValueError(str(array.dtype) + " is not supported.") - dl_tensor = DLTensor() - dl_tensor.data = array.ctypes.data_as(ctypes.c_void_p) - dl_tensor.ctx = DLContext(1, 0) - dl_tensor.ndim = array.ndim - dl_tensor.dtype = DLDataType.TYPE_MAP[str(array.dtype)] - dl_tensor.shape = array.ctypes.shape_as(ctypes.c_int64) - dl_tensor.strides = None - dl_tensor.byte_offset = 0 - return dl_tensor - - def _make_dl_managed_tensor(array): - c_obj = DLManagedTensor() - c_obj.dl_tensor = _make_dl_tensor(array) - c_obj.manager_ctx = _make_manager_ctx(array) - c_obj.deleter = dl_managed_tensor_deleter - return c_obj - - if not zero_copy: - return array(ndarray, dtype=ndarray.dtype) - - if not ndarray.flags['C_CONTIGUOUS']: - raise ValueError("Only c-contiguous arrays are supported for zero-copy") - - ndarray.flags['WRITEABLE'] = False - c_obj = _make_dl_managed_tensor(ndarray) - handle = NDArrayHandle() - check_call(_LIB.MXNDArrayFromDLPackEx(ctypes.byref(c_obj), True, ctypes.byref(handle))) - return array_cls(handle=handle) +""" +to_dlpack_for_write.__doc__ = to_dlpack_for_write_doc diff --git a/python/mxnet/ndarray/numpy/_op.py b/python/mxnet/ndarray/numpy/_op.py index 91fea5f4aeef..14dbf94a1417 100644 --- a/python/mxnet/ndarray/numpy/_op.py +++ b/python/mxnet/ndarray/numpy/_op.py @@ -854,7 +854,7 @@ def _ufunc_helper(lhs, rhs, fn_array, fn_scalar, lfn_scalar, rfn_scalar=None, ou result array or scalar """ from ...numpy import ndarray - from ..ndarray import from_numpy # pylint: disable=unused-import + from ...numpy_extension import from_numpy # pylint: disable=unused-import if isinstance(lhs, numeric_types): if isinstance(rhs, numeric_types): return fn_scalar(lhs, rhs, out=out) @@ -8049,7 +8049,7 @@ def shares_memory(a, b, max_work=None): the following way(s): - Does not support `max_work`, it is a dummy argument - - Actually it is same as `may_share_memory` in MXNet DeepNumPy + - Actually it is same as `may_share_memory` in MXNet np """ return _api_internal.share_memory(a, b).item() @@ -8090,7 +8090,7 @@ def may_share_memory(a, b, max_work=None): the following way(s): - Does not support `max_work`, it is a dummy argument - - Actually it is same as `shares_memory` in MXNet DeepNumPy + - Actually it is same as `shares_memory` in MXNet np """ return _api_internal.share_memory(a, b).item() diff --git a/python/mxnet/ndarray/numpy/random.py b/python/mxnet/ndarray/numpy/random.py index 41e573c76111..c2a2c0bf78ec 100644 --- a/python/mxnet/ndarray/numpy/random.py +++ b/python/mxnet/ndarray/numpy/random.py @@ -390,7 +390,7 @@ def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None): This operator is a little different from the one in official NumPy. The official NumPy operator only accepts 1-D ndarray as mean and 2-D ndarray as cov, - whereas the operator in DeepNumPy supports batch operation and auto-broadcasting. + whereas the operator in MXNet np supports batch operation and auto-broadcasting. Both `mean` and `cov` may have any number of leading dimensions, which correspond to a batch shape. They are not necessarily assumed to have the same batch shape, diff --git a/python/mxnet/numpy/multiarray.py b/python/mxnet/numpy/multiarray.py index ddecaea37aa3..b61686738391 100644 --- a/python/mxnet/numpy/multiarray.py +++ b/python/mxnet/numpy/multiarray.py @@ -49,7 +49,8 @@ from ..context import current_context from ..ndarray import numpy as _mx_nd_np from ..ndarray.numpy import _internal as _npi -from ..ndarray.ndarray import _storage_type, from_numpy +from ..ndarray.ndarray import _storage_type +from ..dlpack import ndarray_from_numpy from .utils import _get_np_op from .fallback import * # pylint: disable=wildcard-import,unused-wildcard-import from . import fallback @@ -179,21 +180,20 @@ def _reshape_view(a, *shape): # pylint: disable=redefined-outer-name ctypes.byref(handle))) return ndarray(handle=handle, writable=a.writable) - -def _as_mx_np_array(object, ctx=None): - """Convert object to mxnet.numpy.ndarray.""" - if isinstance(object, _np.ndarray): - if not object.flags['C_CONTIGUOUS']: - object = _np.ascontiguousarray(object, dtype=object.dtype) - ret = from_numpy(object, array_cls=ndarray) - return ret if ctx is None else ret.as_in_ctx(ctx=ctx) +def _as_mx_np_array(object, ctx=None, zero_copy=False): + """Convert arrays or any array member of container to mxnet.numpy.ndarray on ctx.""" + if object is None or isinstance(object, ndarray): + return object + elif isinstance(object, _np.ndarray): + from_numpy = ndarray_from_numpy(ndarray, array) + return from_numpy(object, zero_copy and object.flags['C_CONTIGUOUS']) elif isinstance(object, (integer_types, numeric_types)): return object - elif isinstance(object, (list, tuple)): - tmp = [_as_mx_np_array(arr) for arr in object] - return object.__class__(tmp) elif isinstance(object, (_np.bool_, _np.bool)): return array(object, dtype=_np.bool_, ctx=ctx) + elif isinstance(object, (list, tuple)): + tmp = [_as_mx_np_array(arr, ctx=ctx, zero_copy=zero_copy) for arr in object] + return object.__class__(tmp) else: raise TypeError('Does not support converting {} to mx.np.ndarray.'.format(str(type(object)))) @@ -392,11 +392,18 @@ def __array_function__(self, func, types, args, kwargs): # pylint: disable=bad- out = func(*new_args, **new_kwargs) return _as_mx_np_array(out, ctx=cur_ctx) else: - # Note: this allows subclasses that don't override - # __array_function__ to handle mxnet.numpy.ndarray objects - if not py_all(issubclass(t, ndarray) for t in types): - return NotImplemented - return mx_np_func(*args, **kwargs) + if py_all(issubclass(t, ndarray) for t in types): + return mx_np_func(*args, **kwargs) + else: + try: + cur_ctx = next(a.ctx for a in args if hasattr(a, 'ctx')) + except StopIteration: + cur_ctx = next(a.ctx for a in kwargs.values() if hasattr(a, 'ctx')) + new_args = _as_mx_np_array(args, ctx=cur_ctx, + zero_copy=func_name in {'may_share_memory', 'shares_memory'}) + new_kwargs = {k: _as_mx_np_array(v, cur_ctx) for k, v in kwargs.items()} + return mx_np_func(*new_args, **new_kwargs) + def _get_np_basic_indexing(self, key): """ @@ -10171,7 +10178,7 @@ def shares_memory(a, b, max_work=None): the following way(s): - Does not support `max_work`, it is a dummy argument - - Actually it is same as `may_share_memory` in MXNet DeepNumPy + - Actually it is same as `may_share_memory` in MXNet np """ return _mx_nd_np.shares_memory(a, b, max_work) @@ -10212,7 +10219,7 @@ def may_share_memory(a, b, max_work=None): the following way(s): - Does not support `max_work`, it is a dummy argument - - Actually it is same as `shares_memory` in MXNet DeepNumPy + - Actually it is same as `shares_memory` in MXNet np """ return _mx_nd_np.may_share_memory(a, b, max_work) diff --git a/python/mxnet/numpy/random.py b/python/mxnet/numpy/random.py index 127d7d7da1d7..e739036e2c71 100644 --- a/python/mxnet/numpy/random.py +++ b/python/mxnet/numpy/random.py @@ -430,7 +430,7 @@ def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None): This operator is a little different from the one in official NumPy. The official NumPy operator only accepts 1-D ndarray as mean and 2-D ndarray as cov, - whereas the operator in DeepNumPy supports batch operation and auto-broadcasting. + whereas the operator in MXNet np supports batch operation and auto-broadcasting. Both `mean` and `cov` may have any number of leading dimensions, which correspond to a batch shape. They are not necessarily assumed to have the same batch shape, diff --git a/python/mxnet/numpy_extension/utils.py b/python/mxnet/numpy_extension/utils.py index f625439335d5..6d3f25b7f0a8 100644 --- a/python/mxnet/numpy_extension/utils.py +++ b/python/mxnet/numpy_extension/utils.py @@ -20,25 +20,15 @@ import ctypes -from .. util import is_np_array, is_np_shape -from .. base import _LIB, check_call, string_types, c_str_array, DLPackHandle -from .. base import c_handle_array, c_str, mx_uint, NDArrayHandle, py_str -from ..numpy import ndarray +from ..util import is_np_array, is_np_shape +from ..base import _LIB, check_call, string_types, c_str_array +from ..base import c_handle_array, c_str, mx_uint, NDArrayHandle, py_str +from ..dlpack import ndarray_to_dlpack_for_read, ndarray_to_dlpack_for_write +from ..dlpack import ndarray_from_dlpack, ndarray_from_numpy +from ..numpy import ndarray, array -__all__ = ['save', 'load', 'to_dlpack_for_read', 'to_dlpack_for_write', 'from_dlpack'] - -PyCapsuleDestructor = ctypes.CFUNCTYPE(None, ctypes.c_void_p) -_c_str_dltensor = c_str('dltensor') -_c_str_used_dltensor = c_str('used_dltensor') - -def _dlpack_deleter(pycapsule): - pycapsule = ctypes.c_void_p(pycapsule) - if ctypes.pythonapi.PyCapsule_IsValid(pycapsule, _c_str_dltensor): - ptr = ctypes.c_void_p( - ctypes.pythonapi.PyCapsule_GetPointer(pycapsule, _c_str_dltensor)) - check_call(_LIB.MXNDArrayCallDLPackDeleter(ptr)) - -_c_dlpack_deleter = PyCapsuleDestructor(_dlpack_deleter) +__all__ = ['save', 'load', 'to_dlpack_for_read', 'to_dlpack_for_write', + 'from_dlpack', 'from_numpy'] def save(file, arr): """Saves a list of `ndarray`s or a dict of `str`->`ndarray` to file. @@ -132,9 +122,8 @@ def load(file): (py_str(names[i]), ndarray(NDArrayHandle(handles[i]))) for i in range(out_size.value)) - -def from_dlpack(dlpack): - """Returns a np.ndarray backed by a dlpack tensor. +from_dlpack = ndarray_from_dlpack(ndarray) +from_dlpack_doc = """Returns a np.ndarray backed by a dlpack tensor. Parameters ---------- @@ -168,21 +157,36 @@ def from_dlpack(dlpack): array([[2., 2., 2.], [2., 2., 2.]]) """ - handle = NDArrayHandle() - dlpack = ctypes.py_object(dlpack) - assert ctypes.pythonapi.PyCapsule_IsValid(dlpack, _c_str_dltensor), ValueError( - 'Invalid DLPack Tensor. DLTensor capsules can be consumed only once.') - dlpack_handle = ctypes.c_void_p(ctypes.pythonapi.PyCapsule_GetPointer(dlpack, _c_str_dltensor)) - check_call(_LIB.MXNDArrayFromDLPackEx(dlpack_handle, False, ctypes.byref(handle))) - # Rename PyCapsule (DLPack) - ctypes.pythonapi.PyCapsule_SetName(dlpack, _c_str_used_dltensor) - # delete the deleter of the old dlpack - ctypes.pythonapi.PyCapsule_SetDestructor(dlpack, None) - return ndarray(handle=handle) - -def to_dlpack_for_read(data): - """Returns a reference view of np.ndarray that represents as DLManagedTensor until - all previous write operations on the current array are finished. +from_dlpack.__doc__ = from_dlpack_doc + + +from_numpy = ndarray_from_numpy(ndarray, array) +from_numpy_doc = """Returns an MXNet's np.ndarray backed by numpy's ndarray. + When `zero_copy` is set to be true, + this API consumes numpy's ndarray and produces MXNet's np.ndarray + without having to copy the content. In this case, we disallow + users to modify the given numpy ndarray, and it is suggested + not to read the numpy ndarray as well for internal correctness. + + Parameters + ---------- + ndarray: np.ndarray + input data + zero_copy: bool + Whether we use DLPack's zero-copy conversion to convert to MXNet's + np.ndarray. + This is only available for c-contiguous arrays, i.e. array.flags[C_CONTIGUOUS] == True. + + Returns + ------- + np.ndarray + a np.ndarray backed by a dlpack tensor + """ +from_numpy.__doc__ = from_numpy_doc + +to_dlpack_for_read = ndarray_to_dlpack_for_read() +to_dlpack_for_read_doc = """Returns a reference view of np.ndarray that represents +as DLManagedTensor until all previous write operations on the current array are finished. Parameters ---------- @@ -205,14 +209,11 @@ def to_dlpack_for_read(data): array([[1., 1., 1.], [1., 1., 1.]]) """ - data.wait_to_read() - dlpack = DLPackHandle() - check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) - return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) +to_dlpack_for_read.__doc__ = to_dlpack_for_read_doc -def to_dlpack_for_write(data): - """Returns a reference view of ndarray that represents as DLManagedTensor until - all previous read/write operations on the current array are finished. +to_dlpack_for_write = ndarray_to_dlpack_for_write() +to_dlpack_for_write_doc = """Returns a reference view of ndarray that represents +as DLManagedTensor until all previous read/write operations on the current array are finished. Parameters ---------- @@ -236,7 +237,4 @@ def to_dlpack_for_write(data): array([[2., 2., 2.], [2., 2., 2.]]) """ - check_call(_LIB.MXNDArrayWaitToWrite(data.handle)) - dlpack = DLPackHandle() - check_call(_LIB.MXNDArrayToDLPack(data.handle, ctypes.byref(dlpack))) - return ctypes.pythonapi.PyCapsule_New(dlpack, _c_str_dltensor, _c_dlpack_deleter) +to_dlpack_for_write.__doc__ = to_dlpack_for_write_doc diff --git a/python/mxnet/runtime.py b/python/mxnet/runtime.py index 27500e7eb772..28525ae65edf 100644 --- a/python/mxnet/runtime.py +++ b/python/mxnet/runtime.py @@ -40,8 +40,7 @@ [✖ CUDA, ✖ CUDNN, ✖ NCCL, ✖ CUDA_RTC, ✖ TENSORRT, ✔ CPU_SSE, ✔ CPU_SSE2, ✔ CPU_SSE3, ✔ CPU_SSE4_1, ✔ CPU_SSE4_2, ✖ CPU_SSE4A, ✔ CPU_AVX, ✖ CPU_AVX2, ✔ OPENMP, ✖ SSE, ✔ F16C, ✔ JEMALLOC, ✔ BLAS_OPEN, ✖ BLAS_ATLAS, ✖ BLAS_MKL, ✖ BLAS_APPLE, ✔ LAPACK, - ✖ MKLDNN, ✔ OPENCV, ✖ CAFFE, ✖ DIST_KVSTORE, ✖ CXX14, ✖ INT64_TENSOR_SIZE, - ✔ SIGNAL_HANDLER, ✔ DEBUG, ✖ TVM_OP] + ✖ MKLDNN, ✔ OPENCV, ✖ DIST_KVSTORE, ✖ INT64_TENSOR_SIZE, ✔ SIGNAL_HANDLER, ✔ DEBUG, ✖ TVM_OP] """ diff --git a/python/mxnet/symbol/numpy/random.py b/python/mxnet/symbol/numpy/random.py index 75780df173e9..af834bbeb5d5 100644 --- a/python/mxnet/symbol/numpy/random.py +++ b/python/mxnet/symbol/numpy/random.py @@ -926,7 +926,7 @@ def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None): This operator is a little different from the one in official NumPy. The official NumPy operator only accepts 1-D ndarray as mean and 2-D ndarray as cov, - whereas the operator in DeepNumPy supports batch operation and auto-broadcasting. + whereas the operator in MXNet np supports batch operation and auto-broadcasting. Both `mean` and `cov` may have any number of leading dimensions, which correspond to a batch shape. They are not necessarily assumed to have the same batch shape, diff --git a/python/mxnet/test_utils.py b/python/mxnet/test_utils.py index 9ec0c6cd1219..cb71c7dd46b9 100644 --- a/python/mxnet/test_utils.py +++ b/python/mxnet/test_utils.py @@ -24,6 +24,7 @@ import numbers import sys import os +import platform import errno import logging import bz2 @@ -48,7 +49,7 @@ from .ndarray.ndarray import _STORAGE_TYPE_STR_TO_ID from .symbol import Symbol from .symbol.numpy import _Symbol as np_symbol -from .util import use_np, use_np_default_dtype # pylint: disable=unused-import +from .util import use_np, use_np_default_dtype, getenv, setenv # pylint: disable=unused-import from .runtime import Features from .numpy_extension import get_cuda_compute_capability @@ -1920,27 +1921,6 @@ def get_bz2_data(data_dir, data_name, url, data_origin_name): bz_file.close() os.remove(data_origin_name) -def set_env_var(key, val, default_val=""): - """Set environment variable - - Parameters - ---------- - - key : str - Env var to set - val : str - New value assigned to the env var - default_val : str, optional - Default value returned if the env var doesn't exist - - Returns - ------- - str - The value of env var before it is set to the new value - """ - prev_val = os.environ.get(key, default_val) - os.environ[key] = val - return prev_val def same_array(array1, array2): """Check whether two NDArrays sharing the same memory block @@ -1965,9 +1945,11 @@ def same_array(array1, array2): array1[:] -= 1 return same(array1.asnumpy(), array2.asnumpy()) + @contextmanager def discard_stderr(): - """Discards error output of a routine if invoked as: + """ + Discards error output of a routine if invoked as: with discard_stderr(): ... @@ -2400,22 +2382,79 @@ def same_symbol_structure(sym1, sym2): return True -class EnvManager(object): - """Environment variable setter and unsetter via with idiom""" - def __init__(self, key, val): - self._key = key - self._next_val = val - self._prev_val = None +@contextmanager +def environment(*args): + """ + Environment variable setter and unsetter via `with` idiom. - def __enter__(self): - self._prev_val = os.environ.get(self._key) - os.environ[self._key] = self._next_val + Takes a specification of env var names and desired values and adds those + settings to the environment in advance of running the body of the `with` + statement. The original environment state is restored afterwards, even + if exceptions are raised in the `with` body. - def __exit__(self, ptype, value, trace): - if self._prev_val: - os.environ[self._key] = self._prev_val - else: - del os.environ[self._key] + Parameters + ---------- + args: + if 2 args are passed: + name, desired_value strings of the single env var to update, or + if 1 arg is passed: + a dict of name:desired_value for env var's to update + + """ + + # On Linux, env var changes made through python's os.environ are seen + # by the backend. On Windows though, the C runtime gets a snapshot + # of the environment that cannot be altered by os.environ. Here we + # check, using a wrapped version of the backend's getenv(), that + # the desired env var value is seen by the backend, and otherwise use + # a wrapped setenv() to establish that value in the backend. + + # Also on Windows, a set env var can never have the value '', since + # the command 'set FOO= ' is used to unset the variable. Perhaps + # as a result, the wrapped dmlc::GetEnv() routine returns the same + # value for unset variables and those set to ''. As a result, we + # ignore discrepancy. + def validate_backend_setting(name, value, can_use_setenv=True): + backend_value = getenv(name) + if value == backend_value or \ + value == '' and backend_value is None and platform.system() == 'Windows': + return + if not can_use_setenv: + raise RuntimeError('Could not set env var {}={} within C Runtime'.format(name, value)) + setenv(name, value) + validate_backend_setting(name, value, can_use_setenv=False) + + # Core routine to alter environment from a dict of env_var_name, env_var_value pairs + def set_environ(env_var_dict): + for env_var_name, env_var_value in env_var_dict.items(): + if env_var_value is None: + os.environ.pop(env_var_name, None) + else: + os.environ[env_var_name] = env_var_value + validate_backend_setting(env_var_name, env_var_value) + + # Create env_var name:value dict from the two calling methods of this routine + if len(args) == 1 and isinstance(args[0], dict): + env_vars = args[0] + else: + assert len(args) == 2, 'Expecting one dict arg or two args: env var name and value' + env_vars = {args[0]: args[1]} + + # Take a snapshot of the existing environment variable state + # for those variables to be changed. get() return None for unset keys. + snapshot = {x: os.environ.get(x) for x in env_vars.keys()} + + # Alter the environment per the env_vars dict + set_environ(env_vars) + + # Now run the wrapped code + try: + yield + finally: + # the backend engines may still be referencing the changed env var state + mx.nd.waitall() + # reinstate original env_var state per the snapshot taken earlier + set_environ(snapshot) def collapse_sum_like(a, shape): diff --git a/python/mxnet/util.py b/python/mxnet/util.py index b35d3f38aa75..05a2bdad3b77 100644 --- a/python/mxnet/util.py +++ b/python/mxnet/util.py @@ -21,7 +21,7 @@ import inspect import threading -from .base import _LIB, check_call +from .base import _LIB, check_call, c_str, py_str _np_ufunc_default_kwargs = { @@ -913,6 +913,7 @@ def get_cuda_compute_capability(ctx): .format(ret, error_str.value.decode())) return cc_major.value * 10 + cc_minor.value + def default_array(source_array, ctx=None, dtype=None): """Creates an array from any object exposing the default(nd or np) array interface. @@ -1144,3 +1145,35 @@ def set_np_default_dtype(is_np_default_dtype=True): # pylint: disable=redefined prev = ctypes.c_bool() check_call(_LIB.MXSetIsNumpyDefaultDtype(ctypes.c_bool(is_np_default_dtype), ctypes.byref(prev))) return prev.value + + +def getenv(name): + """Get the setting of an environment variable from the C Runtime. + + Parameters + ---------- + name : string type + The environment variable name + + Returns + ------- + value : string + The value of the environment variable, or None if not set + """ + ret = ctypes.c_char_p() + check_call(_LIB.MXGetEnv(c_str(name), ctypes.byref(ret))) + return None if ret.value is None else py_str(ret.value) + + +def setenv(name, value): + """Set an environment variable in the C Runtime. + + Parameters + ---------- + name : string type + The environment variable name + value : string type + The desired value to set the environment value to + """ + passed_value = None if value is None else c_str(value) + check_call(_LIB.MXSetEnv(c_str(name), passed_value)) diff --git a/python/setup.py b/python/setup.py index e2b4d645a792..9a5671f3a40f 100644 --- a/python/setup.py +++ b/python/setup.py @@ -131,15 +131,11 @@ def config_cython(): 'Intended Audience :: Education', 'Intended Audience :: Science/Research', 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: C++', 'Programming Language :: Cython', - 'Programming Language :: Other', # R, Scala - 'Programming Language :: Perl', 'Programming Language :: Python', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: Implementation :: CPython', 'Topic :: Scientific/Engineering', 'Topic :: Scientific/Engineering :: Artificial Intelligence', diff --git a/src/api/operator/numpy/linalg/np_norm.cc b/src/api/operator/numpy/linalg/np_norm.cc index 708b08d9e6bd..1928321ad206 100644 --- a/src/api/operator/numpy/linalg/np_norm.cc +++ b/src/api/operator/numpy/linalg/np_norm.cc @@ -44,7 +44,7 @@ MXNET_REGISTER_API("_npi.norm") param.flag = args[4].operator int(); attrs.op = op; - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); // inputs diff --git a/src/api/operator/numpy/np_broadcast_reduce_op_boolean.cc b/src/api/operator/numpy/np_broadcast_reduce_op_boolean.cc index dea510a41608..c3e186195dca 100644 --- a/src/api/operator/numpy/np_broadcast_reduce_op_boolean.cc +++ b/src/api/operator/numpy/np_broadcast_reduce_op_boolean.cc @@ -48,7 +48,7 @@ MXNET_REGISTER_API("_npi.all") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -79,7 +79,7 @@ MXNET_REGISTER_API("_npi.any") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/np_broadcast_reduce_op_index.cc b/src/api/operator/numpy/np_broadcast_reduce_op_index.cc index aa24246f693d..83e16999417b 100644 --- a/src/api/operator/numpy/np_broadcast_reduce_op_index.cc +++ b/src/api/operator/numpy/np_broadcast_reduce_op_index.cc @@ -44,7 +44,7 @@ MXNET_REGISTER_API("_npi.argmax") // param.keepdims param.keepdims = args[2].operator bool(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); // inputs @@ -77,7 +77,7 @@ MXNET_REGISTER_API("_npi.argmin") // param.keepdims param.keepdims = args[2].operator bool(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); // inputs diff --git a/src/api/operator/numpy/np_broadcast_reduce_op_value.cc b/src/api/operator/numpy/np_broadcast_reduce_op_value.cc index a3a45d2d3777..0fe7fc441209 100644 --- a/src/api/operator/numpy/np_broadcast_reduce_op_value.cc +++ b/src/api/operator/numpy/np_broadcast_reduce_op_value.cc @@ -40,7 +40,7 @@ MXNET_REGISTER_API("_npi.broadcast_to") } else { param.shape = TShape(args[1].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); @@ -91,7 +91,7 @@ MXNET_REGISTER_API("_npi.sum") param.initial = args[4].operator double(); } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); @@ -133,7 +133,7 @@ MXNET_REGISTER_API("_npi.mean") param.keepdims = args[3].operator bool(); } param.initial = dmlc::optional(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_inputs = 1; @@ -177,7 +177,7 @@ MXNET_REGISTER_API("_npi.prod") } else { param.initial = args[4].operator double(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_inputs = 1; @@ -213,7 +213,7 @@ MXNET_REGISTER_API("_npi.max") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -244,7 +244,7 @@ MXNET_REGISTER_API("_npi.min") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -275,7 +275,7 @@ MXNET_REGISTER_API("_npi.amax") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -306,7 +306,7 @@ MXNET_REGISTER_API("_npi.amin") param.keepdims = args[2].operator bool(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/np_cumsum.cc b/src/api/operator/numpy/np_cumsum.cc index d0b200c66fd4..a0f68cca1b6b 100644 --- a/src/api/operator/numpy/np_cumsum.cc +++ b/src/api/operator/numpy/np_cumsum.cc @@ -46,7 +46,7 @@ MXNET_REGISTER_API("_npi.cumsum") } else { param.dtype = String2MXNetTypeWithBool(args[2].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); // inputs diff --git a/src/api/operator/numpy/np_delete_op.cc b/src/api/operator/numpy/np_delete_op.cc index 925c8b568e28..f374b2318c9c 100644 --- a/src/api/operator/numpy/np_delete_op.cc +++ b/src/api/operator/numpy/np_delete_op.cc @@ -90,7 +90,7 @@ MXNET_REGISTER_API("_npi.delete") for (int i = 0; i < num_inputs; ++i) { inputs.push_back(args[i].operator mxnet::NDArray*()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_outputs = 0; diff --git a/src/api/operator/numpy/np_ediff1d_op.cc b/src/api/operator/numpy/np_ediff1d_op.cc index df97fd8b68b9..64e15064889a 100644 --- a/src/api/operator/numpy/np_ediff1d_op.cc +++ b/src/api/operator/numpy/np_ediff1d_op.cc @@ -63,7 +63,7 @@ MXNET_REGISTER_API("_npi.ediff1d") num_inputs++; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_einsum_op.cc b/src/api/operator/numpy/np_einsum_op.cc index a5b8339a619e..900739ac10ab 100644 --- a/src/api/operator/numpy/np_einsum_op.cc +++ b/src/api/operator/numpy/np_einsum_op.cc @@ -43,7 +43,7 @@ MXNET_REGISTER_API("_npi.einsum") // param.optimize param.optimize = args[args_size - 1].operator int(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_elemwise_unary_op_basic.cc b/src/api/operator/numpy/np_elemwise_unary_op_basic.cc index 720ab371fae4..9840fc4bd313 100644 --- a/src/api/operator/numpy/np_elemwise_unary_op_basic.cc +++ b/src/api/operator/numpy/np_elemwise_unary_op_basic.cc @@ -98,7 +98,7 @@ MXNET_REGISTER_API("_npi.around") nnvm::NodeAttrs attrs; op::AroundParam param; param.decimals = args[1].operator int64_t(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_inputs = 1; diff --git a/src/api/operator/numpy/np_fill_diagonal_op.cc b/src/api/operator/numpy/np_fill_diagonal_op.cc index 6f8959e9ff61..f087e7d2e608 100644 --- a/src/api/operator/numpy/np_fill_diagonal_op.cc +++ b/src/api/operator/numpy/np_fill_diagonal_op.cc @@ -44,7 +44,7 @@ MXNET_REGISTER_API("_npi.fill_diagonal") } param.wrap = args[2].operator bool(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_histogram_op.cc b/src/api/operator/numpy/np_histogram_op.cc index b517cce80803..fa911268e39b 100644 --- a/src/api/operator/numpy/np_histogram_op.cc +++ b/src/api/operator/numpy/np_histogram_op.cc @@ -49,7 +49,7 @@ MXNET_REGISTER_API("_npi.histogram") param.range = Obj2Tuple(args[3].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_init_op.cc b/src/api/operator/numpy/np_init_op.cc index 155035505d0f..b9ab8973d08e 100644 --- a/src/api/operator/numpy/np_init_op.cc +++ b/src/api/operator/numpy/np_init_op.cc @@ -47,7 +47,7 @@ MXNET_REGISTER_API("_npi.zeros") } else { param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[2].type_code() != kNull) { @@ -70,7 +70,7 @@ MXNET_REGISTER_API("_npi.full_like") } else { param.dtype = String2MXNetTypeWithBool(args[2].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[3].type_code() != kNull) { attrs.dict["ctx"] = args[3].operator std::string(); @@ -107,7 +107,7 @@ MXNET_REGISTER_API("_npi.indices") } else { param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); // param.ctx @@ -223,7 +223,7 @@ MXNET_REGISTER_API("_npi.arange") } else { param.dtype = String2MXNetTypeWithBool(args[3].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[4].type_code() != kNull) { @@ -252,7 +252,7 @@ MXNET_REGISTER_API("_npi.eye") } else { param.dtype = String2MXNetTypeWithBool(args[4].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[3].type_code() != kNull) { @@ -282,7 +282,7 @@ MXNET_REGISTER_API("_npi.linspace") } else { param.dtype = String2MXNetTypeWithBool(args[5].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[4].type_code() != kNull) { @@ -317,7 +317,7 @@ MXNET_REGISTER_API("_npi.logspace") } else { param.dtype = String2MXNetTypeWithBool(args[6].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[5].type_code() != kNull) { @@ -344,7 +344,7 @@ MXNET_REGISTER_API("_npi.ones") } else { param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[2].type_code() != kNull) { attrs.dict["ctx"] = args[2].operator std::string(); @@ -372,7 +372,7 @@ MXNET_REGISTER_API("_npi.full") param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } param.value = args[2].operator double(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[3].type_code() != kNull) { attrs.dict["ctx"] = args[3].operator std::string(); @@ -401,7 +401,7 @@ MXNET_REGISTER_API("_npi.identity") } else { param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[2].type_code() != kNull) { attrs.dict["ctx"] = args[2].operator std::string(); diff --git a/src/api/operator/numpy/np_insert_op.cc b/src/api/operator/numpy/np_insert_op.cc index 0de645e91913..7b2aeaa234f0 100644 --- a/src/api/operator/numpy/np_insert_op.cc +++ b/src/api/operator/numpy/np_insert_op.cc @@ -57,7 +57,7 @@ MXNET_REGISTER_API("_npi.insert_scalar") } else { param.axis = args[3].operator int(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); std::vector inputs; @@ -105,7 +105,7 @@ MXNET_REGISTER_API("_npi.insert_slice") } else { param.axis = args[5].operator int(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); std::vector inputs; @@ -141,7 +141,7 @@ MXNET_REGISTER_API("_npi.insert_tensor") } else { param.axis = args[3].operator int(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); std::vector inputs; diff --git a/src/api/operator/numpy/np_interp_op.cc b/src/api/operator/numpy/np_interp_op.cc index 7959383c9230..0b89373b1a88 100644 --- a/src/api/operator/numpy/np_interp_op.cc +++ b/src/api/operator/numpy/np_interp_op.cc @@ -53,7 +53,7 @@ MXNET_REGISTER_API("_npi.interp") param.x_scalar = args[2].operator double(); param.x_is_scalar = true; attrs.op = op; - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*(), args[1].operator mxnet::NDArray*()}; int num_inputs = 2; @@ -64,7 +64,7 @@ MXNET_REGISTER_API("_npi.interp") param.x_scalar = 0.0; param.x_is_scalar = false; attrs.op = op; - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*(), args[1].operator mxnet::NDArray*(), args[2].operator mxnet::NDArray*()}; diff --git a/src/api/operator/numpy/np_matrix_op.cc b/src/api/operator/numpy/np_matrix_op.cc index 45146ae0ab66..7b53c580683a 100644 --- a/src/api/operator/numpy/np_matrix_op.cc +++ b/src/api/operator/numpy/np_matrix_op.cc @@ -44,7 +44,7 @@ MXNET_REGISTER_API("_npi.transpose") } else { param.axes = TShape(args[1].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; @@ -92,7 +92,7 @@ MXNET_REGISTER_API("_npi.stack") param.num_args = i; param.axis = args[i].operator int64_t(); - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* out = args[i+1].operator mxnet::NDArray*(); @@ -126,7 +126,7 @@ MXNET_REGISTER_API("_npi.flip") } NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -150,7 +150,7 @@ MXNET_REGISTER_API("_npi.concatenate") } else { param.axis = args[arg_size - 2].operator int(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_inputs = arg_size - 2; @@ -222,7 +222,7 @@ MXNET_REGISTER_API("_npi.split") } param.sections = 0; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); @@ -256,7 +256,7 @@ MXNET_REGISTER_API("_npi.roll") } else { param.axis = TShape(args[2].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; @@ -280,7 +280,7 @@ MXNET_REGISTER_API("_npi.rot90") } else { param.axes = TShape(args[2].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; @@ -351,7 +351,7 @@ MXNET_REGISTER_API("_npi.array_split") } param.sections = 0; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; @@ -393,7 +393,7 @@ MXNET_REGISTER_API("_npi.dsplit") } param.sections = 0; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_outputs = 0; @@ -431,7 +431,7 @@ MXNET_REGISTER_API("_npi.hsplit") } param.sections = 0; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_outputs = 0; @@ -471,7 +471,7 @@ MXNET_REGISTER_API("_npi.vsplit") } param.sections = 0; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_outputs = 0; @@ -560,7 +560,7 @@ MXNET_REGISTER_API("_npi.diagflat") param.k = args[1].operator int(); int num_inputs = 1; int num_outputs = 0; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; @@ -583,7 +583,7 @@ MXNET_REGISTER_API("_npi.squeeze") } int num_inputs = 1; int num_outputs = 0; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; diff --git a/src/api/operator/numpy/np_moments_op.cc b/src/api/operator/numpy/np_moments_op.cc index e4e9238bb6c1..45dd45e8f4c9 100644 --- a/src/api/operator/numpy/np_moments_op.cc +++ b/src/api/operator/numpy/np_moments_op.cc @@ -65,7 +65,7 @@ MXNET_REGISTER_API("_npi.std") param.keepdims = args[4].operator bool(); } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); @@ -120,7 +120,7 @@ MXNET_REGISTER_API("_npi.var") param.keepdims = args[4].operator bool(); } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); @@ -168,7 +168,7 @@ MXNET_REGISTER_API("_npi.average") << "weighted cannot be None"; param.weighted = args[4].operator bool(); - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_nan_to_num_op.cc b/src/api/operator/numpy/np_nan_to_num_op.cc index fadc4fe55dc7..65fd26e5432e 100644 --- a/src/api/operator/numpy/np_nan_to_num_op.cc +++ b/src/api/operator/numpy/np_nan_to_num_op.cc @@ -53,7 +53,7 @@ MXNET_REGISTER_API("_npi.nan_to_num") param.neginf = args[4].operator double(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); diff --git a/src/api/operator/numpy/np_pad_op.cc b/src/api/operator/numpy/np_pad_op.cc index 9c15ccc913b7..317076d23d48 100644 --- a/src/api/operator/numpy/np_pad_op.cc +++ b/src/api/operator/numpy/np_pad_op.cc @@ -73,7 +73,7 @@ MXNET_REGISTER_API("_npi.pad") param.reflect_type = args[4].operator std::string(); } attrs.op = op; - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); int num_inputs = 1; int num_outputs = 0; diff --git a/src/api/operator/numpy/np_percentile_op.cc b/src/api/operator/numpy/np_percentile_op.cc index 634ee092c64d..196cca9baaf9 100644 --- a/src/api/operator/numpy/np_percentile_op.cc +++ b/src/api/operator/numpy/np_percentile_op.cc @@ -70,7 +70,7 @@ MXNET_REGISTER_API("_npi.percentile") param.q_scalar = args[1].operator double(); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; int num_inputs = 1; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); @@ -83,7 +83,7 @@ MXNET_REGISTER_API("_npi.percentile") param.q_scalar = dmlc::nullopt; NDArray* inputs[] = {args[0].operator mxnet::NDArray*(), args[1].operator mxnet::NDArray*()}; int num_inputs = 2; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/np_repeat_op.cc b/src/api/operator/numpy/np_repeat_op.cc index c79fb8bbe03c..c98a1711050a 100644 --- a/src/api/operator/numpy/np_repeat_op.cc +++ b/src/api/operator/numpy/np_repeat_op.cc @@ -41,7 +41,7 @@ MXNET_REGISTER_API("_npi.repeats") } int num_inputs = 1; int num_outputs = 0; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; diff --git a/src/api/operator/numpy/np_tensordot_op.cc b/src/api/operator/numpy/np_tensordot_op.cc index 55c131468b12..0cc74d9355e1 100644 --- a/src/api/operator/numpy/np_tensordot_op.cc +++ b/src/api/operator/numpy/np_tensordot_op.cc @@ -62,7 +62,7 @@ inline static void _npi_tensordot(runtime::MXNetArgs args, param.b_axes_summed = Tuple(adt[1]); } attrs.op = op; - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); int num_outputs = 0; int num_inputs = 2; diff --git a/src/api/operator/numpy/np_unique_op.cc b/src/api/operator/numpy/np_unique_op.cc index 288260f5dfb2..a669025e108f 100644 --- a/src/api/operator/numpy/np_unique_op.cc +++ b/src/api/operator/numpy/np_unique_op.cc @@ -44,7 +44,7 @@ MXNET_REGISTER_API("_npi.unique") } else { param.axis = args[4].operator int(); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); // inputs diff --git a/src/api/operator/numpy/np_window_op.cc b/src/api/operator/numpy/np_window_op.cc index 6b99c09cc75a..41c78cb16b6d 100644 --- a/src/api/operator/numpy/np_window_op.cc +++ b/src/api/operator/numpy/np_window_op.cc @@ -45,7 +45,7 @@ inline static void SetNumpyWindowsParam(runtime::MXNetArgs args, } else { param.dtype = String2MXNetTypeWithBool(args[1].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[2].type_code() != kNull) { diff --git a/src/api/operator/numpy/random/np_choice_op.cc b/src/api/operator/numpy/random/np_choice_op.cc index fe7b54d512c8..bc5ebbcffa58 100644 --- a/src/api/operator/numpy/random/np_choice_op.cc +++ b/src/api/operator/numpy/random/np_choice_op.cc @@ -70,7 +70,7 @@ MXNET_REGISTER_API("_npi.choice") num_inputs++; } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[4].type_code() != kNull) { attrs.dict["ctx"] = args[4].operator std::string(); diff --git a/src/api/operator/numpy/random/np_exponential_op.cc b/src/api/operator/numpy/random/np_exponential_op.cc index fbb1644c6c5a..0c5b69417aff 100644 --- a/src/api/operator/numpy/random/np_exponential_op.cc +++ b/src/api/operator/numpy/random/np_exponential_op.cc @@ -58,7 +58,7 @@ MXNET_REGISTER_API("_npi.exponential") inputs[0] = args[0].operator mxnet::NDArray*(); num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/random/np_laplace_op.cc b/src/api/operator/numpy/random/np_laplace_op.cc index 57f770bfa376..a3ff63568828 100644 --- a/src/api/operator/numpy/random/np_laplace_op.cc +++ b/src/api/operator/numpy/random/np_laplace_op.cc @@ -73,7 +73,7 @@ MXNET_REGISTER_API("_npi.laplace") } else { param.dtype = String2MXNetTypeWithBool(args[3].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); if (args[4].type_code() != kNull) { diff --git a/src/api/operator/numpy/random/np_location_scale_op.cc b/src/api/operator/numpy/random/np_location_scale_op.cc index d163b0b5e014..ffcb41073400 100644 --- a/src/api/operator/numpy/random/np_location_scale_op.cc +++ b/src/api/operator/numpy/random/np_location_scale_op.cc @@ -82,7 +82,7 @@ MXNET_REGISTER_API("_npi.gumbel") } num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs.data(), &num_outputs, outputs); @@ -137,7 +137,7 @@ MXNET_REGISTER_API("_npi.logistic") } num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs.data(), &num_outputs, outputs); diff --git a/src/api/operator/numpy/random/np_pareto_op.cc b/src/api/operator/numpy/random/np_pareto_op.cc index 92e3645b75bd..f18cdfdc2ecd 100644 --- a/src/api/operator/numpy/random/np_pareto_op.cc +++ b/src/api/operator/numpy/random/np_pareto_op.cc @@ -58,7 +58,7 @@ MXNET_REGISTER_API("_npi.pareto") inputs[0] = args[0].operator mxnet::NDArray*(); num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/random/np_power_op.cc b/src/api/operator/numpy/random/np_power_op.cc index 12a621726cd2..4f0cb55ef4bc 100644 --- a/src/api/operator/numpy/random/np_power_op.cc +++ b/src/api/operator/numpy/random/np_power_op.cc @@ -58,7 +58,7 @@ MXNET_REGISTER_API("_npi.powerd") inputs[0] = args[0].operator mxnet::NDArray*(); num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/random/np_rayleigh_op.cc b/src/api/operator/numpy/random/np_rayleigh_op.cc index 428e433763ad..5f602af335fd 100644 --- a/src/api/operator/numpy/random/np_rayleigh_op.cc +++ b/src/api/operator/numpy/random/np_rayleigh_op.cc @@ -58,7 +58,7 @@ MXNET_REGISTER_API("_npi.rayleigh") inputs[0] = args[0].operator mxnet::NDArray*(); num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/numpy/random/np_weibull_op.cc b/src/api/operator/numpy/random/np_weibull_op.cc index ef3b7e6ed7b6..18a2918634df 100644 --- a/src/api/operator/numpy/random/np_weibull_op.cc +++ b/src/api/operator/numpy/random/np_weibull_op.cc @@ -58,7 +58,7 @@ MXNET_REGISTER_API("_npi.weibull") inputs[0] = args[0].operator mxnet::NDArray*(); num_inputs = 1; } - attrs.parsed = std::move(param); + attrs.parsed = param; SetAttrDict(&attrs); auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, outputs); diff --git a/src/api/operator/random/np_gamma_op.cc b/src/api/operator/random/np_gamma_op.cc index 44aeb44c44f8..8bf3717c5825 100644 --- a/src/api/operator/random/np_gamma_op.cc +++ b/src/api/operator/random/np_gamma_op.cc @@ -91,7 +91,7 @@ MXNET_REGISTER_API("_npi.gamma") NDArray* out = args[5].operator mxnet::NDArray*(); NDArray** outputs = out == nullptr ? nullptr : &out; int num_outputs = out != nullptr; - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[3].type_code() != kNull) { attrs.dict["ctx"] = args[3].operator std::string(); diff --git a/src/api/operator/random/np_normal_op.cc b/src/api/operator/random/np_normal_op.cc index bd39115f77c2..d78f50fdc564 100644 --- a/src/api/operator/random/np_normal_op.cc +++ b/src/api/operator/random/np_normal_op.cc @@ -77,7 +77,7 @@ MXNET_REGISTER_API("_npi.normal") } else { param.dtype = String2MXNetTypeWithBool(args[4].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[3].type_code() != kNull) { attrs.dict["ctx"] = args[3].operator std::string(); diff --git a/src/api/operator/random/np_uniform_op.cc b/src/api/operator/random/np_uniform_op.cc index 4cbc599cfe4c..41e830fefbed 100644 --- a/src/api/operator/random/np_uniform_op.cc +++ b/src/api/operator/random/np_uniform_op.cc @@ -76,7 +76,7 @@ MXNET_REGISTER_API("_npi.uniform") } else { param.dtype = String2MXNetTypeWithBool(args[4].operator std::string()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; if (args[3].type_code() != kNull) { attrs.dict["ctx"] = args[3].operator std::string(); diff --git a/src/api/operator/tensor/matrix_op.cc b/src/api/operator/tensor/matrix_op.cc index 61344286372e..5b275d5c38a9 100644 --- a/src/api/operator/tensor/matrix_op.cc +++ b/src/api/operator/tensor/matrix_op.cc @@ -79,7 +79,7 @@ MXNET_REGISTER_API("_npi.tile") } else { param.reps = Tuple(args[1].operator ObjectRef()); } - attrs.parsed = std::move(param); + attrs.parsed = param; attrs.op = op; SetAttrDict(&attrs); int num_outputs = 0; diff --git a/src/c_api/c_api.cc b/src/c_api/c_api.cc index ea39d9ac6e5b..011994b54c67 100644 --- a/src/c_api/c_api.cc +++ b/src/c_api/c_api.cc @@ -236,13 +236,13 @@ void CustomFComputeDispatcher(const std::string op_name, return static_cast((*cpualloc)(size)); }; - typedef decltype(gpu_alloc) alloc_type_gpu; + using alloc_type_gpu = decltype(gpu_alloc); auto gpu_malloc = [](void* _gpu_alloc, int size) { alloc_type_gpu* gpualloc = static_cast(_gpu_alloc); return static_cast((*gpualloc)(size)); }; - typedef decltype(sparse_alloc) alloc_type_sparse; + using alloc_type_sparse = decltype(sparse_alloc); auto sparse_malloc = [](void* _sparse_alloc, int index, int indices_len, int idxptr_len, void** data, int64_t** indices, int64_t** indptr) { alloc_type_sparse* sparsealloc = static_cast(_sparse_alloc); @@ -1209,7 +1209,7 @@ void registerPasses(void *lib, int verbose) { // create no-capture lambda so that we can cast it to function pointer // lambda with captures cannot be cast to function pointer and pass to lib_api.h // this needs to be a lambda function so that we can do the decltype cast - typedef decltype(ndarray_alloc) alloc_type_ndarray; + using alloc_type_ndarray = decltype(ndarray_alloc); auto ndarray_malloc = [](const void* _ndarray_alloc, const int64_t* shapes, int num_shapes, const char* dev_str, int dev_id, int dtype, const char* name, int isArg, void** data) { @@ -1299,6 +1299,15 @@ int MXLibInfoFeatures(const struct LibFeature **lib_features, size_t *size) { API_END(); } +int MXLibInfoCompiledWithCXX11ABI(bool* result) { + using namespace features; + API_BEGIN(); + LibInfo* lib_info = LibInfo::getInstance(); + *result = lib_info->cxx11_abi(); + API_END(); +} + + int MXRandomSeed(int seed) { API_BEGIN(); mxnet::RandomSeed(seed); @@ -1316,6 +1325,7 @@ int MXNotifyShutdown() { API_BEGIN(); mxnet::op::custom::CustomOperator::Get()->Stop(); Engine::Get()->NotifyShutdown(); + Engine::Get()->WaitForAll(); API_END(); } @@ -2159,7 +2169,7 @@ int MXDataIterCreateIter(DataIterCreator creator, iter = e->body(); std::vector > kwargs; for (uint32_t i = 0; i < num_param; ++i) { - kwargs.push_back({std::string(keys[i]), std::string(vals[i])}); + kwargs.emplace_back(std::string(keys[i]), std::string(vals[i])); } iter->Init(kwargs); *out = iter; @@ -2286,7 +2296,7 @@ int MXDatasetCreateDataset(DatasetCreator handle, DatasetReg *e = static_cast(handle); std::vector > kwargs; for (uint32_t i = 0; i < num_param; ++i) { - kwargs.push_back({std::string(keys[i]), std::string(vals[i])}); + kwargs.emplace_back(std::string(keys[i]), std::string(vals[i])); } dataset = e->body(kwargs); *out = new std::shared_ptr(dataset); @@ -2303,7 +2313,7 @@ int MXDatasetGetDatasetInfo(DatasetCreator creator, DatasetReg *e = static_cast(creator); return MXAPIGetFunctionRegInfo(e, name, description, num_args, arg_names, arg_type_infos, arg_descriptions, - NULL); + nullptr); } int MXDatasetFree(DatasetHandle handle) { @@ -2374,7 +2384,7 @@ int MXBatchifyFunctionCreateFunction(BatchifyFunctionCreator handle, BatchifyFunctionReg *e = static_cast(handle); std::vector > kwargs; for (uint32_t i = 0; i < num_param; ++i) { - kwargs.push_back({std::string(keys[i]), std::string(vals[i])}); + kwargs.emplace_back(std::string(keys[i]), std::string(vals[i])); } bf = e->body(kwargs); *out = new BatchifyFunctionPtr(bf); @@ -2391,7 +2401,7 @@ int MXBatchifyFunctionGetFunctionInfo(BatchifyFunctionCreator creator, BatchifyFunctionReg *e = static_cast(creator); return MXAPIGetFunctionRegInfo(e, name, description, num_args, arg_names, arg_type_infos, arg_descriptions, - NULL); + nullptr); } int MXBatchifyFunctionInvoke(BatchifyFunctionHandle handle, int batch_size, @@ -3148,8 +3158,8 @@ int MXNDArrayCreateFromSharedMemEx(int shared_pid, int shared_id, const int *sha API_END(); } -typedef Engine::VarHandle VarHandle; -typedef Engine::CallbackOnComplete CallbackOnComplete; +using VarHandle = Engine::VarHandle; +using CallbackOnComplete = Engine::CallbackOnComplete; void AssertValidNumberVars(int num_const_vars, int num_mutable_vars) { CHECK_GE(num_const_vars, 0) << "Non-negative number of const vars expected."; diff --git a/src/c_api/c_api_profile.cc b/src/c_api/c_api_profile.cc index d0ad6a163a0a..79d11b92dff6 100644 --- a/src/c_api/c_api_profile.cc +++ b/src/c_api/c_api_profile.cc @@ -61,7 +61,7 @@ class ProfilingThreadData { /*! * \brief Constructor, nothrow */ - inline ProfilingThreadData() noexcept {} + inline ProfilingThreadData() = default; /*! * \brief Retreive ProfileTask object of the given name, or create if it doesn't exist diff --git a/src/c_api/c_api_symbolic.cc b/src/c_api/c_api_symbolic.cc index 3052256c825d..06f956bc20e9 100644 --- a/src/c_api/c_api_symbolic.cc +++ b/src/c_api/c_api_symbolic.cc @@ -1066,7 +1066,7 @@ int MXQuantizeSymbol(SymbolHandle sym_handle, g = ApplyPass(std::move(g), "QuantizeGraph"); const auto& calib_nodes = g.GetAttr>("calib_nodes"); MXAPIThreadLocalEntry<> *ret = MXAPIThreadLocalStore<>::Get(); - ret->ret_vec_str = std::move(calib_nodes); + ret->ret_vec_str = calib_nodes; *out_num_calib_names = ret->ret_vec_str.size(); ret->ret_vec_charp.clear(); ret->ret_vec_charp.reserve(ret->ret_vec_str.size()); @@ -1130,21 +1130,21 @@ static void _UpdateSymDTypeAttrs( // Update args to have the right dtype attrs if (model_params.size() > 0) { // if model params provided, set dtype only for model params - for (size_t i = 0; i < args.size(); ++i) { - const std::string& node_name = args[i]->attrs.name; + for (const auto & arg : args) { + const std::string& node_name = arg->attrs.name; auto it_model_params = model_params.find(node_name); auto it_with_dtype = node_name_dtype_map.find(node_name); auto it_without_dtype = node_without_dtype_map.find(node_name); if (it_model_params != model_params.end()) { // need to update __dtype__ attribute if already set, else set it if (it_with_dtype != node_name_dtype_map.end()) { - args[i]->attrs.dict[dtype_keyword] = + arg->attrs.dict[dtype_keyword] = std::to_string(it_with_dtype->second); } else { CHECK(it_without_dtype != node_without_dtype_map.end()) << "make sure all nodes without dtype have properly been added " "in node_without_dtype_map"; - args[i]->attrs.dict[dtype_keyword] = + arg->attrs.dict[dtype_keyword] = std::to_string(it_without_dtype->second); } } @@ -1152,12 +1152,12 @@ static void _UpdateSymDTypeAttrs( } else { // if model params not provided, update __dtype__ for all inputs, // which already had it set, don't touch the rest - for (size_t i = 0; i < args.size(); ++i) { - auto it = node_name_dtype_map.find(args[i]->attrs.name); + for (const auto & arg : args) { + auto it = node_name_dtype_map.find(arg->attrs.name); if (it != node_name_dtype_map.end()) { - if (args[i]->attrs.dict.find(dtype_keyword) != - args[i]->attrs.dict.end()) { - args[i]->attrs.dict[dtype_keyword] = std::to_string(it->second); + if (arg->attrs.dict.find(dtype_keyword) != + arg->attrs.dict.end()) { + arg->attrs.dict[dtype_keyword] = std::to_string(it->second); } } } @@ -1256,7 +1256,7 @@ int MXReducePrecisionSymbol(SymbolHandle sym_handle, const nnvm::DTypeVector &inferred_dtypes = g.GetAttr("dtype"); - g.attrs["inferred_dtypes"] = std::make_shared(std::move(inferred_dtypes)); + g.attrs["inferred_dtypes"] = std::make_shared(inferred_dtypes); g.attrs["target_dtype"] = std::make_shared(target_dt); if (cast_optional_params) { diff --git a/src/c_api/c_api_test.cc b/src/c_api/c_api_test.cc index de4fb7dca18e..e84b0c0b1395 100644 --- a/src/c_api/c_api_test.cc +++ b/src/c_api/c_api_test.cc @@ -106,3 +106,25 @@ int MXRemoveSubgraphPropertyOpNamesV2(const char* prop_name) { } API_END(); } + +int MXGetEnv(const char* name, + const char** value) { + API_BEGIN(); + *value = getenv(name); + API_END(); +} + +int MXSetEnv(const char* name, + const char* value) { + API_BEGIN(); +#ifdef _WIN32 + auto value_arg = (value == nullptr) ? "" : value; + _putenv_s(name, value_arg); +#else + if (value == nullptr) + unsetenv(name); + else + setenv(name, value, 1); +#endif + API_END(); +} diff --git a/src/engine/naive_engine.cc b/src/engine/naive_engine.cc index 5e51199e3304..89f6b4d99089 100644 --- a/src/engine/naive_engine.cc +++ b/src/engine/naive_engine.cc @@ -22,6 +22,7 @@ * \file naive_engine.cc * \brief Implementation of NaiveEngine */ +#include #include #include #include @@ -67,8 +68,8 @@ class NaiveEngine final : public Engine { objpool_var_ref_ = common::ObjectPool::_GetSharedRef(); } // virtual destructor - virtual ~NaiveEngine() { #if MXNET_USE_CUDA + ~NaiveEngine() override { LOG(INFO) << "Engine shutdown"; for (size_t i = 0; i < streams_.size(); ++i) { if (streams_[i] != nullptr) { @@ -83,8 +84,10 @@ class NaiveEngine final : public Engine { aux_streams_[i] = nullptr; } } -#endif } +#else + ~NaiveEngine() override = default; +#endif void Stop() override { } @@ -125,10 +128,10 @@ class NaiveEngine final : public Engine { if (opr->profiling) { std::unique_ptr attrs; if (profiler->AggregateEnabled()) { - attrs.reset(new profiler::ProfileOperator::Attributes()); + attrs = std::make_unique(); } - opr->opr_profile.reset(new profiler::ProfileOperator(opr->opr_name.c_str(), - attrs.release())); + opr->opr_profile = std::make_unique(opr->opr_name.c_str(), + attrs.release()); opr->opr_profile->startForDevice(exec_ctx.dev_type, exec_ctx.dev_id); } opr->fn(ctx, on_complete); @@ -175,9 +178,10 @@ class NaiveEngine final : public Engine { opr->profiling = profiling; std::unique_ptr attrs; if (profiler->AggregateEnabled()) { - attrs.reset(new profiler::ProfileOperator::Attributes()); + attrs = std::make_unique(); } - opr->opr_profile.reset(new profiler::ProfileOperator(opr->opr_name.c_str(), attrs.release())); + opr->opr_profile = std::make_unique(opr->opr_name.c_str(), + attrs.release()); opr->opr_profile->startForDevice(exec_ctx.dev_type, exec_ctx.dev_id); } if (exec_ctx.dev_mask() == gpu::kDevMask) { diff --git a/src/engine/threaded_engine_perdevice.cc b/src/engine/threaded_engine_perdevice.cc index 2184d784a414..81494ec66096 100644 --- a/src/engine/threaded_engine_perdevice.cc +++ b/src/engine/threaded_engine_perdevice.cc @@ -28,6 +28,8 @@ #include #include #include + +#include #include "../initialize.h" #include "./threaded_engine.h" #include "./thread_pool.h" @@ -55,7 +57,7 @@ class ThreadedEnginePerDevice : public ThreadedEngine { ThreadedEnginePerDevice() noexcept(false) { this->Start(); } - ~ThreadedEnginePerDevice() noexcept(false) { + ~ThreadedEnginePerDevice() noexcept(false) override { this->StopNoWait(); } @@ -82,12 +84,12 @@ class ThreadedEnginePerDevice : public ThreadedEngine { gpu_copy_nthreads_ = dmlc::GetEnv("MXNET_GPU_COPY_NTHREADS", 2); // create CPU task int cpu_priority_nthreads = dmlc::GetEnv("MXNET_CPU_PRIORITY_NTHREADS", 4); - cpu_priority_worker_.reset(new ThreadWorkerBlock()); - cpu_priority_worker_->pool.reset(new ThreadPool( + cpu_priority_worker_ = std::make_unique>(); + cpu_priority_worker_->pool = std::make_unique( cpu_priority_nthreads, [this](std::shared_ptr ready_event) { this->CPUWorker(Context(), cpu_priority_worker_.get(), ready_event); - }, true)); + }, true); // GPU tasks will be created lazily } @@ -113,10 +115,10 @@ class ThreadedEnginePerDevice : public ThreadedEngine { auto ptr = cpu_normal_workers_.Get(dev_id, [this, ctx, nthread]() { auto blk = new ThreadWorkerBlock(); - blk->pool.reset(new ThreadPool(nthread, + blk->pool = std::make_unique(nthread, [this, ctx, blk](std::shared_ptr ready_event) { this->CPUWorker(ctx, blk, ready_event); - }, true)); + }, true); return blk; }); if (ptr) { @@ -139,12 +141,12 @@ class ThreadedEnginePerDevice : public ThreadedEngine { // Signify to kernel that GPU is being used, so reserve cores as necessary OpenMP::Get()->set_reserve_cores(GetReserveCoreCount(true)); auto blk = new ThreadWorkerBlock(); - blk->pool.reset(new ThreadPool( + blk->pool = std::make_unique( nthread, [this, ctx, is_copy, blk] (std::shared_ptr ready_event) { this->GPUWorker(ctx, is_copy, blk, ready_event); - }, true)); + }, true); return blk; }); if (ptr) { @@ -162,12 +164,12 @@ class ThreadedEnginePerDevice : public ThreadedEngine { // Signify to kernel that GPU is being used, so reserve cores as necessary OpenMP::Get()->set_reserve_cores(GetReserveCoreCount(true)); auto blk = new ThreadWorkerBlock(); - blk->pool.reset(new ThreadPool( + blk->pool = std::make_unique( nthread, [this, ctx, is_copy, blk] (std::shared_ptr ready_event) { this->GPUWorker(ctx, is_copy, blk, ready_event); - }, true)); + }, true); return blk; }); if (ptr) { @@ -179,12 +181,12 @@ class ThreadedEnginePerDevice : public ThreadedEngine { // Signify to kernel that GPU is being used, so reserve cores as necessary OpenMP::Get()->set_reserve_cores(GetReserveCoreCount(true)); auto blk = new ThreadWorkerBlock(); - blk->pool.reset(new ThreadPool( + blk->pool = std::make_unique( nthread, [this, ctx, is_copy, blk] (std::shared_ptr ready_event) { this->GPUWorker(ctx, is_copy, blk, ready_event); - }, true)); + }, true); return blk; }); if (ptr) { @@ -211,7 +213,7 @@ class ThreadedEnginePerDevice : public ThreadedEngine { // constructor ThreadWorkerBlock() = default; // destructor - ~ThreadWorkerBlock() noexcept(false) {} + ~ThreadWorkerBlock() = default; }; /*! \brief whether this is a worker thread. */ diff --git a/src/engine/threaded_engine_pooled.cc b/src/engine/threaded_engine_pooled.cc index c6eb99508e09..1304594e24a8 100644 --- a/src/engine/threaded_engine_pooled.cc +++ b/src/engine/threaded_engine_pooled.cc @@ -27,6 +27,7 @@ #include #include #include +#include #include #include "./threaded_engine.h" #include "./thread_pool.h" @@ -50,7 +51,7 @@ class ThreadedEnginePooled : public ThreadedEngine { this->Start(); } - ~ThreadedEnginePooled() noexcept(false) { + ~ThreadedEnginePooled() noexcept(false) override { StopNoWait(); } @@ -71,17 +72,17 @@ class ThreadedEnginePooled : public ThreadedEngine { } void Start() override { - streams_.reset(new StreamManager()); + streams_ = std::make_unique>(); task_queue_.reset(new dmlc::ConcurrentBlockingQueue()); io_task_queue_.reset(new dmlc::ConcurrentBlockingQueue()); - thread_pool_.reset(new ThreadPool(kNumWorkingThreads, + thread_pool_ = std::make_unique(kNumWorkingThreads, [this](std::shared_ptr ready_event) { ThreadWorker(task_queue_, ready_event); }, - true)); - io_thread_pool_.reset(new ThreadPool(1, + true); + io_thread_pool_ = std::make_unique(1, [this](std::shared_ptr ready_event) { ThreadWorker(io_task_queue_, ready_event); }, - true)); + true); } protected: diff --git a/src/imperative/attach_op_execs_pass.cc b/src/imperative/attach_op_execs_pass.cc index 8f47bc29db13..d065aff5ac92 100644 --- a/src/imperative/attach_op_execs_pass.cc +++ b/src/imperative/attach_op_execs_pass.cc @@ -27,6 +27,8 @@ #include #include #include + +#include #include "../common/utils.h" #include "../common/exec_utils.h" #include "./exec_pass.h" @@ -45,8 +47,8 @@ namespace exec { // FComputeExecutor and FStatefulComputeExecutor inherit from this class class StorageFallbackOpExecutor : public OpExecutor { public: - explicit StorageFallbackOpExecutor(const std::vector &mutate_idx) - : mutate_idx_(mutate_idx) {} + explicit StorageFallbackOpExecutor(std::vector mutate_idx) + : mutate_idx_(std::move(mutate_idx)) {} void Setup() override { init_ = false; @@ -136,12 +138,12 @@ class StatefulComputeExecutor : public StorageFallbackOpExecutor { return state_; } - explicit StatefulComputeExecutor(const OpStatePtr& state, - const FStatefulCompute& fcompute, + explicit StatefulComputeExecutor(OpStatePtr state, + FStatefulCompute fcompute, ExecType exec_type, const std::vector &mutate_idx) : StorageFallbackOpExecutor(mutate_idx), - state_(state), fcompute_(fcompute), exec_type_(exec_type) {} + state_(std::move(state)), fcompute_(std::move(fcompute)), exec_type_(exec_type) {} private: OpStatePtr state_; @@ -182,11 +184,12 @@ class StatefulComputeExExecutor : public OpExecutor { return state_; } - explicit StatefulComputeExExecutor(const NodeAttrs& attrs, - const OpStatePtr& state, - const FStatefulComputeEx& fcompute, + explicit StatefulComputeExExecutor(NodeAttrs attrs, + OpStatePtr state, + FStatefulComputeEx fcompute, ExecType exec_type) - : attrs_(attrs), state_(state), fcompute_(fcompute), exec_type_(exec_type) {} + : attrs_(std::move(attrs)), state_(std::move(state)), fcompute_(std::move(fcompute)), + exec_type_(exec_type) {} private: NodeAttrs attrs_; @@ -214,10 +217,10 @@ class FComputeExecutor : public StorageFallbackOpExecutor { return exec_type_; } - explicit FComputeExecutor(const NodeAttrs& attrs, FCompute fcompute, + explicit FComputeExecutor(NodeAttrs attrs, FCompute fcompute, ExecType exec_type, const std::vector &mutate_idx) : StorageFallbackOpExecutor(mutate_idx), - attrs_(attrs), fcompute_(fcompute), exec_type_(exec_type) { + attrs_(std::move(attrs)), fcompute_(std::move(fcompute)), exec_type_(exec_type) { } private: @@ -250,9 +253,9 @@ class FComputeExExecutor : public OpExecutor { return exec_type_; } - explicit FComputeExExecutor(const NodeAttrs& attrs, FComputeEx fcompute, + explicit FComputeExExecutor(NodeAttrs attrs, FComputeEx fcompute, ExecType exec_type) - : attrs_(attrs), fcompute_(fcompute), exec_type_(exec_type) { + : attrs_(std::move(attrs)), fcompute_(std::move(fcompute)), exec_type_(exec_type) { } private: diff --git a/src/imperative/cached_op.cc b/src/imperative/cached_op.cc index 7b3a5d32aac6..e0f832917203 100644 --- a/src/imperative/cached_op.cc +++ b/src/imperative/cached_op.cc @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ +#include #include #include #include "./imperative_utils.h" @@ -87,8 +88,7 @@ CachedOp::CachedOp( SetRefCounts(&fwd_graph_, full_graph_); } -CachedOp::~CachedOp() { -} +CachedOp::~CachedOp() = default; std::vector CachedOp::Gradient( const nnvm::ObjectPtr& node, @@ -1286,7 +1286,7 @@ void CachedOpParamParser(nnvm::NodeAttrs* attrs) { std::vector > flags; for (const auto& attr : attrs->dict) flags.emplace_back(attr.first, attr.second); - attrs->parsed = CachedOpPtr(new CachedOp(sym, flags)); + attrs->parsed = std::make_shared(sym, flags); } } diff --git a/src/imperative/cached_op_threadsafe.cc b/src/imperative/cached_op_threadsafe.cc index 744daf08564b..7d93eb84bd11 100644 --- a/src/imperative/cached_op_threadsafe.cc +++ b/src/imperative/cached_op_threadsafe.cc @@ -250,7 +250,7 @@ void CachedOpThreadSafeParamParser(nnvm::NodeAttrs* attrs) { throw dmlc::ParamError(os.str()); } } -CachedOpThreadSafe::~CachedOpThreadSafe() {} +CachedOpThreadSafe::~CachedOpThreadSafe() = default; NNVM_REGISTER_OP(_CachedOpThreadSafe) .set_num_inputs([](const NodeAttrs& attrs) { diff --git a/src/imperative/eliminate_common_expr_pass.cc b/src/imperative/eliminate_common_expr_pass.cc index 805b6acca590..a0156da94746 100644 --- a/src/imperative/eliminate_common_expr_pass.cc +++ b/src/imperative/eliminate_common_expr_pass.cc @@ -184,10 +184,10 @@ void EliminateCommonNodes(Graph* g, // insert Copy nodes as appropriate const Op* copy_op = Op::Get("_copy"); nnvm::NodeEntryMap unique_outputs; - for (size_t i = 0; i < g->outputs.size(); ++i) { - auto kv = unique_outputs.find(g->outputs[i]); + for (auto & output : g->outputs) { + auto kv = unique_outputs.find(output); if (kv == unique_outputs.end()) { - unique_outputs.emplace(g->outputs[i], 0); + unique_outputs.emplace(output, 0); } else { ObjectPtr copy_node = Node::Create(); std::ostringstream os; @@ -196,7 +196,7 @@ void EliminateCommonNodes(Graph* g, copy_node->attrs.op = copy_op; copy_node->attrs.name = os.str(); copy_node->inputs.emplace_back(kv->first); - g->outputs[i] = nnvm::NodeEntry{copy_node, 0, 0}; + output = nnvm::NodeEntry{copy_node, 0, 0}; } } } diff --git a/src/imperative/imperative.cc b/src/imperative/imperative.cc index 45fdf549b0ed..9e162d4b74ea 100644 --- a/src/imperative/imperative.cc +++ b/src/imperative/imperative.cc @@ -119,11 +119,11 @@ OpStatePtr Imperative::Invoke( SetWriteInplaceReq(inputs, outputs, &req); OpStatePtr ret = InvokeOp(ctx, attrs, inputs, outputs, req, dispatch_mode); // the followinng loop is used for finding out the correct shape when some shapes are dynamic - for (size_t i = 0; i < outputs.size(); i++) { - if (!shape_is_known(outputs[i]->shape())) { + for (auto output : outputs) { + if (!shape_is_known(output->shape())) { // the WaitToRead overhead here does not seem to be avoidable - outputs[i]->WaitToRead(); - outputs[i]->SetShapeFromChunk(); + output->WaitToRead(); + output->SetShapeFromChunk(); } } return ret; diff --git a/src/initialize.cc b/src/initialize.cc index a352c0a22024..784e54f9a9d7 100644 --- a/src/initialize.cc +++ b/src/initialize.cc @@ -23,7 +23,6 @@ * \brief initialize mxnet library */ #include "initialize.h" -#include #include #include #include "./engine/openmp.h" @@ -34,7 +33,6 @@ #include "common/utils.h" #include "engine/openmp.h" - #if defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__) #include /*! @@ -57,6 +55,9 @@ void win_err(char **err) { #include #endif +#include + + namespace mxnet { #if MXNET_USE_SIGNAL_HANDLER && DMLC_LOG_STACK_TRACE diff --git a/src/io/batchify.cc b/src/io/batchify.cc index 27ed850522ff..01d93f5cad8f 100644 --- a/src/io/batchify.cc +++ b/src/io/batchify.cc @@ -73,8 +73,8 @@ class GroupBatchify : public BatchifyFunction { } } - virtual bool Batchify(const std::vector >& inputs, - std::vector* outputs) { + bool Batchify(const std::vector >& inputs, + std::vector* outputs) override { auto bs = inputs.size(); CHECK_GT(bs, 0) << "BatchifyFunction should handle at lease 1 sample"; auto out_size = inputs[0].size(); @@ -84,8 +84,8 @@ class GroupBatchify : public BatchifyFunction { for (size_t i = 0; i < out_size; ++i) { std::vector > inp; inp.reserve(inputs.size()); - for (size_t j = 0; j < inputs.size(); ++j) { - std::vector curr({inputs[j][i]}); + for (const auto & input : inputs) { + std::vector curr({input[i]}); inp.emplace_back(curr); } std::vector tmp; @@ -128,8 +128,8 @@ class StackBatchify : public BatchifyFunction { param_.InitAllowUnknown(kwargs); } - virtual bool Batchify(const std::vector >& inputs, - std::vector* outputs) { + bool Batchify(const std::vector >& inputs, + std::vector* outputs) override { auto out_size = SanityCheck(inputs); auto bs = inputs.size(); outputs->resize(out_size); @@ -235,8 +235,8 @@ class PadBatchify : public BatchifyFunction { param_.InitAllowUnknown(kwargs); } - virtual bool Batchify(const std::vector >& inputs, - std::vector* outputs) { + bool Batchify(const std::vector >& inputs, + std::vector* outputs) override { auto bs = inputs.size(); CHECK_GT(bs, 0) << "BatchifyFunction should handle at lease 1 sample"; auto out_size = inputs[0].size(); diff --git a/src/io/dataloader.cc b/src/io/dataloader.cc index 947c26202b5c..47754470453c 100644 --- a/src/io/dataloader.cc +++ b/src/io/dataloader.cc @@ -63,13 +63,11 @@ DMLC_REGISTER_PARAMETER(ThreadedDataLoaderParam); template class ThreadedDataLoader : public IIterator { public: - ThreadedDataLoader() { - } + ThreadedDataLoader() = default; // destructor - virtual ~ThreadedDataLoader(void) { - } + ~ThreadedDataLoader() override = default; // constructor - void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); int maxthread, threadget; #pragma omp parallel @@ -90,15 +88,15 @@ class ThreadedDataLoader : public IIterator { this->BeforeFirst(); } // before first - void BeforeFirst(void) { + void BeforeFirst() override { sampler_->BeforeFirst(); } - int64_t GetLenHint(void) const { + int64_t GetLenHint() const override { return sampler_->GetLenHint(); } - bool Next(void) { + bool Next() override { bool has_next = sampler_->Next(); if (!has_next) return false; auto samples = sampler_->Value(); @@ -152,7 +150,7 @@ class ThreadedDataLoader : public IIterator { return true; } - const TBlobBatch &Value(void) const { + const TBlobBatch &Value() const override { return out_; } diff --git a/src/io/dataset.cc b/src/io/dataset.cc index 4c47f440150f..ba548c968b19 100644 --- a/src/io/dataset.cc +++ b/src/io/dataset.cc @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -75,11 +76,11 @@ class RecordFileDataset final : public Dataset { delete idx_stream; } - uint64_t GetLen() const { + uint64_t GetLen() const override { return idx_.size(); } - bool GetItem(uint64_t idx, std::vector* ret) { + bool GetItem(uint64_t idx, std::vector* ret) override { ret->resize(1); auto& out = (*ret)[0]; static thread_local std::unique_ptr stream; @@ -193,11 +194,11 @@ class ImageRecordFileDataset : public Dataset { base_ = std::make_shared(kwargs); } - uint64_t GetLen() const { + uint64_t GetLen() const override { return base_->GetLen(); } - bool GetItem(uint64_t idx, std::vector* ret) { + bool GetItem(uint64_t idx, std::vector* ret) override { CHECK_LT(idx, GetLen()); std::vector raw; if (!base_->GetItem(idx, &raw)) return false; @@ -292,11 +293,11 @@ class ImageSequenceDataset final : public Dataset { img_list_ = dmlc::Split(param_.img_list, param_.path_sep); } - uint64_t GetLen() const { + uint64_t GetLen() const override { return img_list_.size(); } - bool GetItem(uint64_t idx, std::vector* ret) { + bool GetItem(uint64_t idx, std::vector* ret) override { #if MXNET_USE_OPENCV CHECK_LT(idx, img_list_.size()) << "GetItem index: " << idx << " out of bound: " << img_list_.size(); @@ -355,11 +356,11 @@ class NDArrayDataset final : public Dataset { size_ = data_.shape().begin()[0]; } - uint64_t GetLen() const { + uint64_t GetLen() const override { return size_; } - bool GetItem(uint64_t idx, std::vector* rets) { + bool GetItem(uint64_t idx, std::vector* rets) override { CHECK_LT(idx, size_) << "GetItem index: " << idx << " out of bound: " << size_; rets->resize(1); @@ -430,11 +431,11 @@ class GroupDataset final : public Dataset { } } - uint64_t GetLen() const { + uint64_t GetLen() const override { return size_; } - bool GetItem(uint64_t idx, std::vector* ret) { + bool GetItem(uint64_t idx, std::vector* ret) override { CHECK_LT(idx, size_) << "GetItem index: " << idx << " out of bound: " << size_; ret->clear(); @@ -485,11 +486,11 @@ class IndexedDataset final : public Dataset { base_data_ = *static_cast*>(reinterpret_cast(param_.base)); } - uint64_t GetLen() const { + uint64_t GetLen() const override { return param_.indices.ndim(); } - bool GetItem(uint64_t idx, std::vector* ret) { + bool GetItem(uint64_t idx, std::vector* ret) override { CHECK_GT(param_.indices.ndim(), idx) << "IndexError: " << idx << " from total: " << param_.indices.ndim(); auto new_idx = param_.indices[idx]; @@ -545,15 +546,15 @@ class LazyTransformDataset final : public Dataset { this->pass_through_indices_ = other.pass_through_indices_; this->use_input_indices_ = other.use_input_indices_; this->num_outputs_ = other.num_outputs_; - this->cached_op_ = NaiveCachedOpPtr(new NaiveCachedOp( - other.cached_op_->sym_, other.cached_op_->flags_)); + this->cached_op_ = std::make_shared( + other.cached_op_->sym_, other.cached_op_->flags_); this->base_data_ = other.base_data_; } explicit LazyTransformDataset(const std::vector >& kwargs) { param_.InitAllowUnknown(kwargs); auto op = *static_cast(reinterpret_cast(param_.cached_op)); - cached_op_ = NaiveCachedOpPtr(new NaiveCachedOp(op->sym_, op->flags_)); + cached_op_ = std::make_shared(op->sym_, op->flags_); base_data_ = *static_cast*>(reinterpret_cast(param_.dataset)); // use first item to calculate size info @@ -596,14 +597,13 @@ class LazyTransformDataset final : public Dataset { num_outputs_ = inputs.size() + cached_op_->num_outputs() - cached_op_->num_inputs(); } - virtual ~LazyTransformDataset(void) { - } + ~LazyTransformDataset() override = default; - uint64_t GetLen() const { + uint64_t GetLen() const override { return base_data_->GetLen(); } - bool GetItem(uint64_t idx, std::vector* outputs) { + bool GetItem(uint64_t idx, std::vector* outputs) override { std::vector inputs; if (!base_data_->GetItem(idx, &inputs)) return false; outputs->reserve(num_outputs_); @@ -616,8 +616,8 @@ class LazyTransformDataset final : public Dataset { std::vector ndinputs; std::vector ndoutputs; ndinputs.reserve(inputs.size()); - for (size_t i = 0; i < use_input_indices_.size(); ++i) { - ndinputs.emplace_back(&(inputs[use_input_indices_[i]])); + for (int use_input_indice : use_input_indices_) { + ndinputs.emplace_back(&(inputs[use_input_indice])); } ndoutputs.reserve(cached_op_->num_outputs()); CHECK_LE(cached_op_->num_outputs(), outputs->size()); @@ -625,8 +625,8 @@ class LazyTransformDataset final : public Dataset { ndoutputs.emplace_back(&(outputs->at(i))); } - for (size_t i = 0; i < inputs.size(); ++i) { - inputs[i].WaitToRead(); + for (auto & input : inputs) { + input.WaitToRead(); } CHECK(inputs.size() > 0) << "dataset getitem requires at least one input"; Context default_ctx = inputs[0].ctx(); diff --git a/src/io/image_aug_default.cc b/src/io/image_aug_default.cc index c26ebf857a41..c39777ba3054 100644 --- a/src/io/image_aug_default.cc +++ b/src/io/image_aug_default.cc @@ -205,7 +205,7 @@ std::vector ListDefaultAugParams() { class DefaultImageAugmenter : public ImageAugmenter { public: // contructor - DefaultImageAugmenter() {} + DefaultImageAugmenter() = default; void Init(const std::vector >& kwargs) override { std::vector > kwargs_left; kwargs_left = param_.InitAllowUnknown(kwargs); diff --git a/src/io/image_det_aug_default.cc b/src/io/image_det_aug_default.cc index f602a63954a3..6b3109fbce19 100644 --- a/src/io/image_det_aug_default.cc +++ b/src/io/image_det_aug_default.cc @@ -404,7 +404,7 @@ class ImageDetLabel { class DefaultImageDetAugmenter : public ImageAugmenter { public: // contructor - DefaultImageDetAugmenter() {} + DefaultImageDetAugmenter() = default; void Init(const std::vector >& kwargs) override { std::vector > kwargs_left; diff --git a/src/io/iter_csv.cc b/src/io/iter_csv.cc index 0c1b82355410..87f295df544f 100644 --- a/src/io/iter_csv.cc +++ b/src/io/iter_csv.cc @@ -62,16 +62,16 @@ class CSVIterBase: public IIterator { CSVIterBase() { out_.data.resize(2); } - virtual ~CSVIterBase() {} + ~CSVIterBase() override = default; // initialize iterator loads data in - virtual void Init(const std::vector >& kwargs) = 0; + void Init(const std::vector >& kwargs) override = 0; /*! \brief reset the iterator */ - virtual void BeforeFirst(void) = 0; + void BeforeFirst() override = 0; /*! \brief move to next item */ - virtual bool Next(void) = 0; + bool Next() override = 0; /*! \brief get current data */ - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } @@ -93,9 +93,9 @@ class CSVIterBase: public IIterator { template class CSVIterTyped: public CSVIterBase { public: - virtual ~CSVIterTyped() {} + ~CSVIterTyped() override = default; // intialize iterator loads data in - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); data_parser_.reset(dmlc::Parser::Create(param_.data_csv.c_str(), 0, 1, "csv")); if (param_.label_csv != "NULL") { @@ -108,7 +108,7 @@ class CSVIterTyped: public CSVIterBase { } } - virtual void BeforeFirst() { + void BeforeFirst() override { data_parser_->BeforeFirst(); if (label_parser_.get() != nullptr) { label_parser_->BeforeFirst(); @@ -119,7 +119,7 @@ class CSVIterTyped: public CSVIterBase { end_ = false; } - virtual bool Next() { + bool Next() override { if (end_) return false; while (data_ptr_ >= data_size_) { if (!data_parser_->Next()) { @@ -163,11 +163,11 @@ class CSVIterTyped: public CSVIterBase { class CSVIter: public IIterator { public: - CSVIter() {} - virtual ~CSVIter() {} + CSVIter() = default; + ~CSVIter() override = default; // intialize iterator loads data in - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); bool dtype_has_value = false; int target_dtype = -1; @@ -195,15 +195,15 @@ class CSVIter: public IIterator { iterator_->Init(kwargs); } - virtual void BeforeFirst() { + void BeforeFirst() override { iterator_->BeforeFirst(); } - virtual bool Next() { + bool Next() override { return iterator_->Next(); } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return iterator_->Value(); } diff --git a/src/io/iter_image_det_recordio.cc b/src/io/iter_image_det_recordio.cc index 876c07520f52..3fe0ec7f3e17 100644 --- a/src/io/iter_image_det_recordio.cc +++ b/src/io/iter_image_det_recordio.cc @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -213,7 +214,7 @@ class ImageDetRecordIOParser { inline void Init(const std::vector >& kwargs); // set record to the head - inline void BeforeFirst(void) { + inline void BeforeFirst() { return source_->BeforeFirst(); } // parse next set of records, return an array of @@ -273,8 +274,8 @@ inline void ImageDetRecordIOParser::Init( prnds_.emplace_back(new common::RANDOM_ENGINE((i + 1) * kRandMagic)); } if (param_.path_imglist.length() != 0) { - label_map_.reset(new ImageDetLabelMap(param_.path_imglist.c_str(), - param_.label_width, !param_.verbose)); + label_map_ = std::make_unique(param_.path_imglist.c_str(), + param_.label_width, !param_.verbose); } CHECK(param_.path_imgrec.length() != 0) << "ImageDetRecordIOIterator: must specify image_rec"; @@ -510,12 +511,12 @@ class ImageDetRecordIter : public IIterator { public: ImageDetRecordIter() : data_(nullptr) { } // destructor - virtual ~ImageDetRecordIter(void) { + ~ImageDetRecordIter() override { iter_.Destroy(); delete data_; } // constructor - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); // use the kwarg to init parser parser_.Init(kwargs); @@ -533,13 +534,13 @@ class ImageDetRecordIter : public IIterator { rnd_.seed(kRandMagic + param_.seed); } // before first - virtual void BeforeFirst(void) { + void BeforeFirst() override { iter_.BeforeFirst(); inst_order_.clear(); inst_ptr_ = 0; } - virtual bool Next(void) { + bool Next() override { while (true) { if (inst_ptr_ < inst_order_.size()) { std::pair p = inst_order_[inst_ptr_]; @@ -553,7 +554,7 @@ class ImageDetRecordIter : public IIterator { for (unsigned i = 0; i < data_->size(); ++i) { const InstVector& tmp = (*data_)[i]; for (unsigned j = 0; j < tmp.Size(); ++j) { - inst_order_.push_back(std::make_pair(i, j)); + inst_order_.emplace_back(i, j); } } // shuffle instance order if needed @@ -566,7 +567,7 @@ class ImageDetRecordIter : public IIterator { return false; } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } diff --git a/src/io/iter_image_recordio.cc b/src/io/iter_image_recordio.cc index 066cad973774..23008050ec28 100644 --- a/src/io/iter_image_recordio.cc +++ b/src/io/iter_image_recordio.cc @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -53,7 +54,7 @@ class ImageRecordIOParser { inline void Init(const std::vector >& kwargs); // set record to the head - inline void BeforeFirst(void) { + inline void BeforeFirst() { return source_->BeforeFirst(); } // parse next set of records, return an array of @@ -111,8 +112,8 @@ inline void ImageRecordIOParser::Init( prnds_.emplace_back(new common::RANDOM_ENGINE((i + 1) * kRandMagic)); } if (param_.path_imglist.length() != 0) { - label_map_.reset(new ImageLabelMap(param_.path_imglist.c_str(), - param_.label_width, !param_.verbose)); + label_map_ = std::make_unique(param_.path_imglist.c_str(), + param_.label_width, !param_.verbose); } CHECK(param_.path_imgrec.length() != 0) << "ImageRecordIOIterator: must specify image_rec"; @@ -253,12 +254,12 @@ class ImageRecordIter : public IIterator { public: ImageRecordIter() : data_(nullptr) { } // destructor - virtual ~ImageRecordIter(void) { + ~ImageRecordIter() override { iter_.Destroy(); delete data_; } // constructor - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); // use the kwarg to init parser parser_.Init(kwargs); @@ -276,13 +277,13 @@ class ImageRecordIter : public IIterator { rnd_.seed(kRandMagic + param_.seed); } // before first - virtual void BeforeFirst(void) { + void BeforeFirst() override { iter_.BeforeFirst(); inst_order_.clear(); inst_ptr_ = 0; } - virtual bool Next(void) { + bool Next() override { while (true) { if (inst_ptr_ < inst_order_.size()) { std::pair p = inst_order_[inst_ptr_]; @@ -296,7 +297,7 @@ class ImageRecordIter : public IIterator { for (unsigned i = 0; i < data_->size(); ++i) { const InstVector& tmp = (*data_)[i]; for (unsigned j = 0; j < tmp.Size(); ++j) { - inst_order_.push_back(std::make_pair(i, j)); + inst_order_.emplace_back(i, j); } } // shuffle instance order if needed @@ -309,7 +310,7 @@ class ImageRecordIter : public IIterator { return false; } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } diff --git a/src/io/iter_image_recordio_2.cc b/src/io/iter_image_recordio_2.cc index ad6e2a19fbc2..f4f88b76d65c 100644 --- a/src/io/iter_image_recordio_2.cc +++ b/src/io/iter_image_recordio_2.cc @@ -33,6 +33,7 @@ #include #include #include +#include #include #if MXNET_USE_LIBJPEG_TURBO #include @@ -55,7 +56,7 @@ class ImageRecordIOParser2 { inline void Init(const std::vector >& kwargs); // set record to the head - inline void BeforeFirst(void) { + inline void BeforeFirst() { if (batch_param_.round_batch == 0 || !overflow) { n_parsed_ = 0; return source_->BeforeFirst(); @@ -79,7 +80,7 @@ class ImageRecordIOParser2 { #endif inline size_t ParseChunk(DType* data_dptr, real_t* label_dptr, const size_t current_size, dmlc::InputSplit::Blob * chunk); - inline void CreateMeanImg(void); + inline void CreateMeanImg(); // magic number to seed prng static const int kRandMagic = 111; @@ -169,8 +170,8 @@ inline void ImageRecordIOParser2::Init( prnds_.emplace_back(new common::RANDOM_ENGINE((i + 1) * kRandMagic)); } if (param_.path_imglist.length() != 0) { - label_map_.reset(new ImageLabelMap(param_.path_imglist.c_str(), - param_.label_width, !param_.verbose)); + label_map_ = std::make_unique(param_.path_imglist.c_str(), + param_.label_width, !param_.verbose); } CHECK(param_.path_imgrec.length() != 0) << "ImageRecordIter2: must specify image_rec"; @@ -665,7 +666,7 @@ inline size_t ImageRecordIOParser2::ParseChunk(DType* data_dptr, real_t* // create mean image. template -inline void ImageRecordIOParser2::CreateMeanImg(void) { +inline void ImageRecordIOParser2::CreateMeanImg() { if (param_.verbose) { LOG(INFO) << "Cannot find " << normalize_param_.mean_img << ": create mean image, this will take some time..."; @@ -677,8 +678,7 @@ inline void ImageRecordIOParser2::CreateMeanImg(void) { inst_order_.clear(); // Parse chunk w/o putting anything in out ParseChunk(nullptr, nullptr, batch_param_.batch_size, &chunk); - for (size_t i = 0; i < inst_order_.size(); ++i) { - std::pair place = inst_order_[i]; + for (auto place : inst_order_) { mshadow::Tensor outimg = temp_[place.first][place.second].data[0].template get(); if (imcnt == 0) { @@ -714,13 +714,13 @@ inline void ImageRecordIOParser2::CreateMeanImg(void) { template class ImageRecordIter2 : public IIterator { public: - ImageRecordIter2() : out_(nullptr) { } + ImageRecordIter2() = default; - virtual ~ImageRecordIter2(void) { + ~ImageRecordIter2() override { iter_.Destroy(); } - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { prefetch_param_.InitAllowUnknown(kwargs); parser_.Init(kwargs); // maximum prefetch threaded iter internal size @@ -737,12 +737,12 @@ class ImageRecordIter2 : public IIterator { [this]() { parser_.BeforeFirst(); }); } - virtual void BeforeFirst(void) { + void BeforeFirst() override { iter_.BeforeFirst(); } // From iter_prefetcher.h - virtual bool Next(void) { + bool Next() override { if (out_ != nullptr) { recycle_queue_.push(out_); out_ = nullptr; } @@ -759,7 +759,7 @@ class ImageRecordIter2 : public IIterator { return iter_.Next(&out_); } - virtual const DataBatch &Value(void) const { + const DataBatch &Value() const override { return *out_; } @@ -769,7 +769,7 @@ class ImageRecordIter2 : public IIterator { /*! \brief Parameters */ PrefetcherParam prefetch_param_; /*! \brief output data */ - DataBatch *out_; + DataBatch *out_{nullptr}; /*! \brief queue to be recycled */ std::queue recycle_queue_; /* \brief parser */ @@ -784,19 +784,19 @@ class ImageRecordIter2CPU : public IIterator { var_ = Engine::Get()->NewVariable(); } - virtual ~ImageRecordIter2CPU(void) { + ~ImageRecordIter2CPU() override { Engine::Get()->DeleteVariable([](mxnet::RunContext ctx) {}, Context::CPU(), var_); delete out_; } - virtual void Init(const std::vector>& kwargs) { + void Init(const std::vector>& kwargs) override { parser_.Init(kwargs); } - virtual void BeforeFirst(void) { parser_.BeforeFirst(); } + void BeforeFirst() override { parser_.BeforeFirst(); } // From iter_prefetcher.h - virtual bool Next(void) { + bool Next() override { bool result = false; const auto engine = Engine::Get(); engine->PushSync( @@ -808,7 +808,7 @@ class ImageRecordIter2CPU : public IIterator { return result; } - virtual const DataBatch& Value(void) const { return *out_; } + const DataBatch& Value() const override { return *out_; } private: /*! \brief Backend thread */ @@ -824,7 +824,7 @@ class ImageRecordIter2CPU : public IIterator { class ImageRecordIter2Wrapper : public IIterator { public: - ~ImageRecordIter2Wrapper(void) override { + ~ImageRecordIter2Wrapper() override { if (record_iter_) delete record_iter_; } void Init(const std::vector>& kwargs) override { @@ -869,14 +869,14 @@ class ImageRecordIter2Wrapper : public IIterator { record_iter_->Init(kwargs); } - void BeforeFirst(void) override { + void BeforeFirst() override { record_iter_->BeforeFirst(); } // From iter_prefetcher.h - bool Next(void) override { return record_iter_->Next(); } + bool Next() override { return record_iter_->Next(); } - const DataBatch &Value(void) const override { + const DataBatch &Value() const override { return record_iter_->Value(); } diff --git a/src/io/iter_libsvm.cc b/src/io/iter_libsvm.cc index 3decc7b33e04..0965bfc5192e 100644 --- a/src/io/iter_libsvm.cc +++ b/src/io/iter_libsvm.cc @@ -66,11 +66,11 @@ struct LibSVMIterParam : public dmlc::Parameter { class LibSVMIter: public SparseIIterator { public: - LibSVMIter() {} - virtual ~LibSVMIter() {} + LibSVMIter() = default; + ~LibSVMIter() override = default; // intialize iterator loads data in - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); CHECK_EQ(param_.data_shape.ndim(), 1) << "dimension of data_shape is expected to be 1"; CHECK_GT(param_.num_parts, 0) << "number of parts should be positive"; @@ -97,7 +97,7 @@ class LibSVMIter: public SparseIIterator { } } - virtual void BeforeFirst() { + void BeforeFirst() override { data_parser_->BeforeFirst(); if (label_parser_.get() != nullptr) { label_parser_->BeforeFirst(); @@ -108,7 +108,7 @@ class LibSVMIter: public SparseIIterator { end_ = false; } - virtual bool Next() { + bool Next() override { if (end_) return false; while (data_ptr_ >= data_size_) { if (!data_parser_->Next()) { @@ -144,16 +144,16 @@ class LibSVMIter: public SparseIIterator { return true; } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } - virtual const NDArrayStorageType GetStorageType(bool is_data) const { + const NDArrayStorageType GetStorageType(bool is_data) const override { if (is_data) return kCSRStorage; return param_.label_shape.Size() > 1 ? kCSRStorage : kDefaultStorage; } - virtual const mxnet::TShape GetShape(bool is_data) const { + const mxnet::TShape GetShape(bool is_data) const override { if (is_data) return param_.data_shape; return param_.label_shape; } diff --git a/src/io/iter_mnist.cc b/src/io/iter_mnist.cc index b752ce48d417..0d5f96c0e193 100644 --- a/src/io/iter_mnist.cc +++ b/src/io/iter_mnist.cc @@ -79,15 +79,15 @@ struct MNISTParam : public dmlc::Parameter { class MNISTIter: public IIterator { public: - MNISTIter(void) : loc_(0), inst_offset_(0) { + MNISTIter() { img_.dptr_ = nullptr; out_.data.resize(2); } - virtual ~MNISTIter(void) { + ~MNISTIter() override { delete []img_.dptr_; } // intialize iterator loads data in - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { std::map kmap(kwargs.begin(), kwargs.end()); param_.InitAllowUnknown(kmap); this->LoadImage(); @@ -115,10 +115,10 @@ class MNISTIter: public IIterator { } } } - virtual void BeforeFirst(void) { + void BeforeFirst() override { this->loc_ = 0; } - virtual bool Next(void) { + bool Next() override { if (loc_ + param_.batch_size <= img_.size(0)) { batch_data_.dptr_ = img_[loc_].dptr_; batch_label_.dptr_ = &labels_[loc_]; @@ -135,7 +135,7 @@ class MNISTIter: public IIterator { return false; } } - virtual const TBlobBatch &Value(void) const { + const TBlobBatch &Value() const override { return out_; } @@ -151,7 +151,7 @@ class MNISTIter: public IIterator { static_cast(count) / param_.num_parts * (param_.part_index+1)); } - inline void LoadImage(void) { + inline void LoadImage() { dmlc::SeekStream* stdimg = dmlc::SeekStream::CreateForRead(param_.image.c_str()); ReadInt(stdimg); @@ -184,7 +184,7 @@ class MNISTIter: public IIterator { img_ *= 1.0f / 256.0f; delete stdimg; } - inline void LoadLabel(void) { + inline void LoadLabel() { dmlc::SeekStream* stdlabel = dmlc::SeekStream::CreateForRead(param_.label.c_str()); ReadInt(stdlabel); @@ -206,7 +206,7 @@ class MNISTIter: public IIterator { } delete stdlabel; } - inline void Shuffle(void) { + inline void Shuffle() { std::shuffle(inst_.begin(), inst_.end(), common::RANDOM_ENGINE(kRandMagic + param_.seed)); std::vector tmplabel(labels_.size()); mshadow::TensorContainer tmpimg(img_.shape_); @@ -238,7 +238,7 @@ class MNISTIter: public IIterator { /*! \brief output */ TBlobBatch out_; /*! \brief current location */ - index_t loc_; + index_t loc_{0}; /*! \brief image content */ mshadow::Tensor img_; /*! \brief label content */ @@ -248,7 +248,7 @@ class MNISTIter: public IIterator { /*! \brief batch label tensor */ mshadow::Tensor batch_label_; /*! \brief instance index offset */ - unsigned inst_offset_; + unsigned inst_offset_{0}; /*! \brief instance index */ std::vector inst_; // magic number to setup randomness diff --git a/src/io/iter_sampler.cc b/src/io/iter_sampler.cc index 932bcc9fe38e..049347dfd9cf 100644 --- a/src/io/iter_sampler.cc +++ b/src/io/iter_sampler.cc @@ -27,6 +27,7 @@ #include #include #include +#include #include #include "../common/utils.h" #include "./iter_batchloader.h" @@ -52,22 +53,22 @@ DMLC_REGISTER_PARAMETER(SequentialSamplerParam); class SequentialSampler : public IIterator { public: - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); indices_.resize(param_.length); std::iota(std::begin(indices_), std::end(indices_), 0); // fill like arange out_.data.resize(1); } - virtual void BeforeFirst(void) { + void BeforeFirst() override { pos_ = 0; } - virtual int64_t GetLenHint(void) const { + int64_t GetLenHint() const override { return static_cast(indices_.size()); } - virtual bool Next(void) { + bool Next() override { if (pos_ < indices_.size()) { int64_t *ptr = indices_.data() + pos_; out_.data[0] = TBlob(ptr, TShape({1, }), cpu::kDevMask, 0); @@ -77,7 +78,7 @@ class SequentialSampler : public IIterator { return false; } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } @@ -117,27 +118,27 @@ DMLC_REGISTER_PARAMETER(RandomSamplerParam); class RandomSampler : public IIterator { public: - virtual void Init(const std::vector >& kwargs) { + void Init(const std::vector >& kwargs) override { param_.InitAllowUnknown(kwargs); indices_.resize(param_.length); std::iota(std::begin(indices_), std::end(indices_), 0); // fill like arange mshadow::Random *ctx_rng = ResourceManager::Get()->Request( Context::CPU(), ResourceRequest::kRandom).get_random(nullptr); - rng_.reset(new common::RANDOM_ENGINE(ctx_rng->GetSeed())); + rng_ = std::make_unique(ctx_rng->GetSeed()); out_.data.resize(1); BeforeFirst(); } - virtual void BeforeFirst(void) { + void BeforeFirst() override { std::shuffle(std::begin(indices_), std::end(indices_), *rng_); pos_ = 0; } - virtual int64_t GetLenHint(void) const { + int64_t GetLenHint() const override { return static_cast(indices_.size()); } - virtual bool Next(void) { + bool Next() override { if (pos_ < indices_.size()) { int64_t *ptr = indices_.data() + pos_; out_.data[0] = TBlob(ptr, TShape({1, }), cpu::kDevMask, 0); @@ -147,7 +148,7 @@ class RandomSampler : public IIterator { return false; } - virtual const DataInst &Value(void) const { + const DataInst &Value() const override { return out_; } private: diff --git a/src/kvstore/kvstore.cc b/src/kvstore/kvstore.cc index fa3f91097ba6..87daad60ccc2 100644 --- a/src/kvstore/kvstore.cc +++ b/src/kvstore/kvstore.cc @@ -23,7 +23,6 @@ * \brief implement kv_store */ #include -#include #include #include "./kvstore_local.h" @@ -36,6 +35,8 @@ std::atomic mxnet::kvstore::KVStoreDist::customer_id_{0}; #include "./kvstore_nccl.h" #endif // MXNET_USE_NCCL +#include + namespace mxnet { KVStore* KVStore::Create(const char *type_name) { diff --git a/src/libinfo.cc b/src/libinfo.cc index 211444e857d2..ce7f1266eaeb 100644 --- a/src/libinfo.cc +++ b/src/libinfo.cc @@ -84,7 +84,6 @@ class FeatureSet { feature_bits.set(OPENCV, MXNET_USE_OPENCV); // Misc - feature_bits.set(CAFFE, MXNET_USE_CAFFE); feature_bits.set(DIST_KVSTORE, MXNET_USE_DIST_KVSTORE); feature_bits.set(INT64_TENSOR_SIZE, MXNET_USE_INT64_TENSOR_SIZE); feature_bits.set(SIGNAL_HANDLER, MXNET_USE_SIGNAL_HANDLER); @@ -127,6 +126,9 @@ LibInfo *LibInfo::getInstance() { m_inst = std::make_unique(); return m_inst.get(); } +bool LibInfo::cxx11_abi() { + return MXNET_GLIBCXX_USE_CXX11_ABI; +} std::unique_ptr LibInfo::m_inst = nullptr; @@ -155,9 +157,7 @@ const std::vector EnumNames::names = { "LAPACK", "MKLDNN", "OPENCV", - "CAFFE", "DIST_KVSTORE", - "CXX14", "INT64_TENSOR_SIZE", "SIGNAL_HANDLER", "DEBUG", diff --git a/src/nnvm/gradient.cc b/src/nnvm/gradient.cc index 09c02b2aa26f..447f658890d8 100644 --- a/src/nnvm/gradient.cc +++ b/src/nnvm/gradient.cc @@ -168,8 +168,8 @@ Graph Gradient(Graph src) { // information is needed in later stages to determine whether putting a node // on the mirror path can be beneficial or not. using mxnet::ShapeVector; - ShapeVector in_arg_shapes = std::move(src.GetAttr("in_arg_shapes")); - DTypeVector in_arg_dtypes = std::move(src.GetAttr("in_arg_dtypes")); + ShapeVector in_arg_shapes = src.GetAttr("in_arg_shapes"); + DTypeVector in_arg_dtypes = src.GetAttr("in_arg_dtypes"); src = mxnet::exec::InferShape(std::move(src), std::move(in_arg_shapes), "__shape__"); src = mxnet::exec::InferType(std::move(src), std::move(in_arg_dtypes), "__dtype__"); CHECK(src.GetAttr("shape_num_unknown_nodes") == 0U); @@ -583,8 +583,7 @@ Graph BuildGradientGraph( // gather all the output gradient entries and apply the aggregation function out_agg_grads.clear(); auto& out_grad_vec = output_grads.at(src_fwd_node.get()); - for (uint32_t i = 0; i < out_grad_vec.size(); ++i) { - GradEntry& e = out_grad_vec[i]; + for (auto & e : out_grad_vec) { e.sum = agg_fun(std::move(e.grads)); out_agg_grads.push_back(e.sum); } @@ -698,7 +697,7 @@ Graph BuildGradientGraph( // register pass NNVM_REGISTER_PASS(MXGradient) -.describe("Return a gradient graph of src.attrs[\"ys\"] wrt src.attrs[\"xs\"]") +.describe(R"(Return a gradient graph of src.attrs["ys"] wrt src.attrs["xs"])") .set_body(Gradient) .set_change_graph(true) .depend_graph_attr("grad_ys") diff --git a/src/nnvm/graph_editor.cc b/src/nnvm/graph_editor.cc index 2d2053c536d0..44a807eda174 100644 --- a/src/nnvm/graph_editor.cc +++ b/src/nnvm/graph_editor.cc @@ -27,6 +27,8 @@ #include #include +#include + namespace nnvm { ObjectPtr CreateVariableNode(const std::string& name); } @@ -67,7 +69,7 @@ bool CutGraphInputs(const std::vector &input_entries, bool skip_var, std::vector *orig_entries) { struct pred_entry { nnvm::NodeEntry e; - explicit pred_entry(const nnvm::NodeEntry &_e): e(_e) {} + explicit pred_entry(nnvm::NodeEntry _e): e(std::move(_e)) {} bool operator()(const nnvm::NodeEntry e1) { return e.node == e1.node && e.index == e1.index; } diff --git a/src/nnvm/low_precision_pass.cc b/src/nnvm/low_precision_pass.cc index 66ec59d44f19..a13344dfccf5 100644 --- a/src/nnvm/low_precision_pass.cc +++ b/src/nnvm/low_precision_pass.cc @@ -134,11 +134,10 @@ static bool CheckConditionalFP32( auto it_params = it->second; // For each param name, iterate through param values to check // if the provided param name is equal to any of the values - for (auto it_param = it_params.begin(); it_param != it_params.end(); - it_param++) { - auto param_key = node->attrs.dict.find(it_param->first); + for (auto & it_param : it_params) { + auto param_key = node->attrs.dict.find(it_param.first); if (param_key != node->attrs.dict.end()) { - auto it_param_vals = it_param->second; + auto it_param_vals = it_param.second; if (std::find(it_param_vals.begin(), it_param_vals.end(), param_key->second) != it_param_vals.end()) { return true; @@ -282,13 +281,13 @@ Graph ReducePrecision(Graph &&src) { << "can't handle the widest_dtype_ops with mutable inputs."; int out_dtype = target_dtype; bool have_unknown_dtype = false; - for (size_t i = 0; i < node->inputs.size(); ++i) { + for (auto & input : node->inputs) { // Try to infer output dtype based on input dtype - if (!mirror_target_dtype_map.count(node->inputs[i]) - && !mirror_fp32_map.count(node->inputs[i])) { + if (!mirror_target_dtype_map.count(input) + && !mirror_fp32_map.count(input)) { have_unknown_dtype = true; break; - } else if (mirror_fp32_map.count(node->inputs[i])) { + } else if (mirror_fp32_map.count(input)) { out_dtype = mshadow::kFloat32; } } diff --git a/src/nnvm/tvm_bridge.cc b/src/nnvm/tvm_bridge.cc index 17e05e3316cd..66e010a4e534 100644 --- a/src/nnvm/tvm_bridge.cc +++ b/src/nnvm/tvm_bridge.cc @@ -40,6 +40,7 @@ #include #include +#include namespace mxnet { @@ -55,7 +56,7 @@ class TVMFunctor { public: // constructor explicit TVMFunctor(PackedFunc func, PackedFunc fset_stream) - : func_(func), fset_stream_(fset_stream) {} + : func_(std::move(func)), fset_stream_(std::move(fset_stream)) {} void Init(const TVMArgs& args, const std::vector& const_loc, diff --git a/src/operator/contrib/boolean_mask.cc b/src/operator/contrib/boolean_mask.cc index a4e924eb3446..882984430d52 100644 --- a/src/operator/contrib/boolean_mask.cc +++ b/src/operator/contrib/boolean_mask.cc @@ -68,8 +68,8 @@ bool BooleanMaskBackStorageType(const nnvm::NodeAttrs& attrs, for (int &attr : *out_attrs) { attr = kDefaultStorage; } - for (size_t i = 0; i < out_attrs->size(); i++) - out_attrs->at(i) = kDefaultStorage; + for (int & out_attr : *out_attrs) + out_attr = kDefaultStorage; *dispatch_mode = DispatchMode::kFComputeEx; return true; } diff --git a/src/operator/contrib/dgl_graph.cc b/src/operator/contrib/dgl_graph.cc index 89bee8abf655..c8e27f38d1a6 100644 --- a/src/operator/contrib/dgl_graph.cc +++ b/src/operator/contrib/dgl_graph.cc @@ -26,6 +26,7 @@ #include #include #include +#include #include "../elemwise_op_common.h" #include "../../imperative/imperative_utils.h" @@ -63,7 +64,7 @@ class ArrayHeap { } } } - ~ArrayHeap() {} + ~ArrayHeap() = default; /* * Remove term from index (this costs O(log m) steps) @@ -417,8 +418,8 @@ static void RandomSample(size_t set_size, sampled_idxs.insert(distribution(generator)); } out->clear(); - for (auto it = sampled_idxs.begin(); it != sampled_idxs.end(); it++) { - out->push_back(*it); + for (size_t sampled_idx : sampled_idxs) { + out->push_back(sampled_idx); } } @@ -528,9 +529,9 @@ static void GetNonUniformSample(const float* probability, struct neigh_list { std::vector neighs; std::vector edges; - neigh_list(const std::vector &_neighs, - const std::vector &_edges) - : neighs(_neighs), edges(_edges) {} + neigh_list(std::vector _neighs, + std::vector _edges) + : neighs(std::move(_neighs)), edges(std::move(_edges)) {} }; /* @@ -620,25 +621,25 @@ static void SampleSubgraph(const NDArray &csr, // First we push the size of neighbor vector neighbor_list.push_back(tmp_sampled_edge_list.size()); // Then push the vertices - for (size_t i = 0; i < tmp_sampled_src_list.size(); ++i) { - neighbor_list.push_back(tmp_sampled_src_list[i]); + for (dgl_id_t & i : tmp_sampled_src_list) { + neighbor_list.push_back(i); } // Finally we push the edge list - for (size_t i = 0; i < tmp_sampled_edge_list.size(); ++i) { - neighbor_list.push_back(tmp_sampled_edge_list[i]); + for (dgl_id_t & i : tmp_sampled_edge_list) { + neighbor_list.push_back(i); } num_edges += tmp_sampled_src_list.size(); - for (size_t i = 0; i < tmp_sampled_src_list.size(); ++i) { + for (dgl_id_t & i : tmp_sampled_src_list) { // If we have sampled the max number of vertices, we have to stop. if (sub_ver_mp.size() >= max_num_vertices) break; // We need to add the neighbor in the hashtable here. This ensures that // the vertex in the queue is unique. If we see a vertex before, we don't // need to add it to the queue again. - auto ret = sub_ver_mp.insert(tmp_sampled_src_list[i]); + auto ret = sub_ver_mp.insert(i); // If the sampled neighbor is inserted to the map successfully. if (ret.second) - sub_vers.emplace_back(tmp_sampled_src_list[i], cur_node_level + 1); + sub_vers.emplace_back(i, cur_node_level + 1); } } // Let's check if there is a vertex that we haven't sampled its neighbors. @@ -960,8 +961,8 @@ static bool DGLSubgraphStorageType(const nnvm::NodeAttrs& attrs, bool success = true; *dispatch_mode = DispatchMode::kFComputeEx; - for (size_t i = 0; i < out_attrs->size(); i++) { - if (!type_assign(&(*out_attrs)[i], mxnet::kCSRStorage)) + for (int & out_attr : *out_attrs) { + if (!type_assign(&out_attr, mxnet::kCSRStorage)) success = false; } return success; @@ -999,8 +1000,8 @@ static bool DGLSubgraphType(const nnvm::NodeAttrs& attrs, for (size_t i = 0; i < num_g; i++) { CHECK_EQ(in_attrs->at(i + 1), mshadow::kInt64); } - for (size_t i = 0; i < out_attrs->size(); i++) { - out_attrs->at(i) = in_attrs->at(0); + for (int & out_attr : *out_attrs) { + out_attr = in_attrs->at(0); } return true; } @@ -1016,7 +1017,7 @@ class Bitmap { public: Bitmap(const dgl_id_t *vid_data, int64_t len): map(size) { for (int64_t i = 0; i < len; ++i) { - map[hash(vid_data[i])] = 1; + map[hash(vid_data[i])] = true; } } @@ -1531,8 +1532,8 @@ static bool SubgraphCompactStorageType(const nnvm::NodeAttrs& attrs, bool success = true; *dispatch_mode = DispatchMode::kFComputeEx; - for (size_t i = 0; i < out_attrs->size(); i++) { - if (!type_assign(&(*out_attrs)[i], mxnet::kCSRStorage)) + for (int & out_attr : *out_attrs) { + if (!type_assign(&out_attr, mxnet::kCSRStorage)) success = false; } return success; @@ -1570,11 +1571,11 @@ static bool SubgraphCompactShape(const nnvm::NodeAttrs& attrs, static bool SubgraphCompactType(const nnvm::NodeAttrs& attrs, std::vector *in_attrs, std::vector *out_attrs) { - for (size_t i = 0; i < in_attrs->size(); i++) { - CHECK_EQ(in_attrs->at(i), mshadow::kInt64); + for (int & in_attr : *in_attrs) { + CHECK_EQ(in_attr, mshadow::kInt64); } - for (size_t i = 0; i < out_attrs->size(); i++) { - out_attrs->at(i) = mshadow::kInt64; + for (int & out_attr : *out_attrs) { + out_attr = mshadow::kInt64; } return true; } diff --git a/src/operator/contrib/multi_proposal.cc b/src/operator/contrib/multi_proposal.cc index e77a0b5aeba1..bf8555ca1c09 100644 --- a/src/operator/contrib/multi_proposal.cc +++ b/src/operator/contrib/multi_proposal.cc @@ -289,11 +289,11 @@ class MultiProposalOp : public Operator{ this->param_ = param; } - virtual void Forward(const OpContext &ctx, + void Forward(const OpContext &ctx, const std::vector &in_data, const std::vector &req, const std::vector &out_data, - const std::vector &aux_states) { + const std::vector &aux_states) override { using namespace mshadow; using namespace mshadow::expr; CHECK_EQ(in_data.size(), 3); @@ -458,13 +458,13 @@ class MultiProposalOp : public Operator{ } } - virtual void Backward(const OpContext &ctx, + void Backward(const OpContext &ctx, const std::vector &out_grad, const std::vector &in_data, const std::vector &out_data, const std::vector &req, const std::vector &in_grad, - const std::vector &aux_states) { + const std::vector &aux_states) override { using namespace mshadow; using namespace mshadow::expr; CHECK_EQ(in_grad.size(), 3); diff --git a/src/operator/contrib/proposal.cc b/src/operator/contrib/proposal.cc index 935372d34dbe..1ca14537c2f6 100644 --- a/src/operator/contrib/proposal.cc +++ b/src/operator/contrib/proposal.cc @@ -278,11 +278,11 @@ class ProposalOp : public Operator{ this->param_ = param; } - virtual void Forward(const OpContext &ctx, + void Forward(const OpContext &ctx, const std::vector &in_data, const std::vector &req, const std::vector &out_data, - const std::vector &aux_states) { + const std::vector &aux_states) override { using namespace mshadow; using namespace mshadow::expr; CHECK_EQ(in_data.size(), 3); @@ -420,13 +420,13 @@ class ProposalOp : public Operator{ } } - virtual void Backward(const OpContext &ctx, + void Backward(const OpContext &ctx, const std::vector &out_grad, const std::vector &in_data, const std::vector &out_data, const std::vector &req, const std::vector &in_grad, - const std::vector &aux_states) { + const std::vector &aux_states) override { using namespace mshadow; using namespace mshadow::expr; CHECK_EQ(in_grad.size(), 3); diff --git a/src/operator/contrib/rroi_align.cc b/src/operator/contrib/rroi_align.cc index 14690d6270d2..415eecf8eedf 100644 --- a/src/operator/contrib/rroi_align.cc +++ b/src/operator/contrib/rroi_align.cc @@ -27,7 +27,7 @@ */ #include "./rroi_align-inl.h" #include -#include "math.h" +#include using std::max; using std::min; diff --git a/src/operator/control_flow.cc b/src/operator/control_flow.cc index e6cc90ac13dc..7926f26f3f24 100644 --- a/src/operator/control_flow.cc +++ b/src/operator/control_flow.cc @@ -24,6 +24,8 @@ #include #include #include + +#include #include "./operator_common.h" #include "./elemwise_op_common.h" #include "../imperative/imperative_utils.h" @@ -648,9 +650,9 @@ static void WhileLoopComputeExCPU(const OpStatePtr& state_ptr, const_cast(outputs[i]).SetShapeFromChunk(); } if (state.n_iterations == 0) { - for (size_t i = 0; i < outputs.size(); ++i) { - if (!shape_is_known(outputs[i].shape())) { - const_cast(outputs[i]).ReshapeAndAlloc({1}); + for (const auto & output : outputs) { + if (!shape_is_known(output.shape())) { + const_cast(output).ReshapeAndAlloc({1}); } } } @@ -865,11 +867,11 @@ class CondState { LoopState else_branch; int branch_selection; // 1 if then branch; 0 if else branch; -1 if undefined - CondState(const CondParam ¶ms, + CondState(CondParam params, const nnvm::Symbol &cond, const nnvm::Symbol &then_sym, const nnvm::Symbol &else_sym): - params(params), + params(std::move(params)), cond_op(LoopState::MakeSharedOp(cond)), then_branch(then_sym), else_branch(else_sym), diff --git a/src/operator/leaky_relu.cc b/src/operator/leaky_relu.cc index 681ca44b357f..8a1a07573f4e 100644 --- a/src/operator/leaky_relu.cc +++ b/src/operator/leaky_relu.cc @@ -202,7 +202,7 @@ The following modified ReLU Activation functions are supported: .set_attr("FSetInputVarAttrOnCompose", [](const nnvm::NodeAttrs& attrs, nnvm::ObjectPtr var, const int index) { if (index == 1 && var->attrs.dict.find("__init__") == var->attrs.dict.end()) { - var->attrs.dict["__init__"] = "[\"Constant\", {\"value\": 0.25}]"; + var->attrs.dict["__init__"] = R"(["Constant", {"value": 0.25}])"; } }); diff --git a/src/operator/nn/ctc_loss.cc b/src/operator/nn/ctc_loss.cc index 096ef8c0d7b4..59f89f0576f3 100644 --- a/src/operator/nn/ctc_loss.cc +++ b/src/operator/nn/ctc_loss.cc @@ -50,6 +50,7 @@ DMLC_REGISTER_PARAMETER(CTCLossOpParam); NNVM_REGISTER_OP(CTCLoss) .add_alias("ctc_loss") +.add_alias("_npx_ctc_loss") .add_alias("_contrib_CTCLoss") .add_alias("_contrib_ctc_loss") .describe(R"code(Connectionist Temporal Classification Loss. diff --git a/src/operator/nn/ctc_loss.cu b/src/operator/nn/ctc_loss.cu index a4491bf6986e..c6952d33c86a 100644 --- a/src/operator/nn/ctc_loss.cu +++ b/src/operator/nn/ctc_loss.cu @@ -51,6 +51,7 @@ namespace op { NNVM_REGISTER_OP(CTCLoss) .add_alias("ctc_loss") +.add_alias("_npx_ctc_loss") .add_alias("_contrib_ctc_loss") .add_alias("_contrib_CTCLoss") .set_attr("FCompute", CTCLossOpForward); diff --git a/src/operator/nn/mkldnn/mkldnn_act.cc b/src/operator/nn/mkldnn/mkldnn_act.cc index 4654c24547cd..e76a0629cc01 100644 --- a/src/operator/nn/mkldnn/mkldnn_act.cc +++ b/src/operator/nn/mkldnn/mkldnn_act.cc @@ -100,7 +100,7 @@ mkldnn::algorithm GetMKLDNNActAlgo(const LeakyReLUParam& param) { case leakyrelu::kELU: return mkldnn::algorithm::eltwise_elu; case leakyrelu::kGELU: - return mkldnn::algorithm::eltwise_gelu; + return mkldnn::algorithm::eltwise_gelu_erf; default: LOG(FATAL) << "unknown activation type for LeakyReLU: " << param.act_type; return mkldnn::algorithm::eltwise_relu; diff --git a/src/operator/numpy/np_einsum_op.cc b/src/operator/numpy/np_einsum_op.cc index 522780f5f3ad..a89f1ad40de4 100644 --- a/src/operator/numpy/np_einsum_op.cc +++ b/src/operator/numpy/np_einsum_op.cc @@ -56,8 +56,8 @@ */ #include "./np_einsum_op-inl.h" -#include -#include +#include +#include namespace mxnet { namespace op { diff --git a/src/operator/numpy/np_elemwise_broadcast_logic_op.cc b/src/operator/numpy/np_elemwise_broadcast_logic_op.cc index b191553f16da..9aacbc02b061 100644 --- a/src/operator/numpy/np_elemwise_broadcast_logic_op.cc +++ b/src/operator/numpy/np_elemwise_broadcast_logic_op.cc @@ -79,7 +79,9 @@ TBlob PrependAxes(const TBlob& src, const int dst_ndim) { return src.reshape(dst_shape); } -struct TVMBinaryBroadcastCompute { + +template +struct GetBinaryBroadcastCompute { const char* func; void operator()(const nnvm::NodeAttrs& attrs, const mxnet::OpContext& ctx, @@ -96,6 +98,38 @@ struct TVMBinaryBroadcastCompute { std::vector type_codes; std::vector values; + const TBlob& a = inputs[0]; + const TBlob& b = inputs[1]; + if (a.type_flag_ != b.type_flag_) { + if (outputs[0].shape_.Size() == 0U) return; + mxnet::TShape new_lshape, new_rshape, new_oshape; + const TBlob& lhs = inputs[0]; + const TBlob& rhs = inputs[1]; + const TBlob& out = outputs[0]; + int ndim = BinaryBroadcastShapeCompact(lhs.shape_, rhs.shape_, out.shape_, + &new_lshape, &new_rshape, &new_oshape); + if (!ndim) { + ElemwiseBinaryOp::ComputeLogic(attrs, ctx, inputs, req, outputs); + } else { + if (req[0] == kNullOp) return; + mshadow::Stream *s = ctx.get_stream(); + MSHADOW_TYPE_SWITCH_WITH_BOOL(lhs.type_flag_, DType, { + MSHADOW_TYPE_SWITCH_WITH_BOOL(rhs.type_flag_, EType, { + BROADCAST_NDIM_SWITCH(ndim, NDim, { + mshadow::Shape oshape = new_oshape.get(); + mshadow::Shape lstride = mxnet_op::calc_stride(new_lshape.get()); + mshadow::Shape rstride = mxnet_op::calc_stride(new_rshape.get()); + mxnet_op::Kernel, xpu>:: + template LaunchEx(s, new_oshape.Size(), req[0], lstride, rstride, oshape, + lhs.dptr(), rhs.dptr(), + out.dptr()); + }); + }); + }); + } + return; + } + const int ondim = outputs[0].shape_.ndim(); const size_t num_args = inputs.size() + outputs.size(); type_codes.resize(num_args); @@ -146,13 +180,15 @@ MXNET_OPERATOR_REGISTER_NP_BINARY_LOGIC(logical_xor); #define MXNET_OPERATOR_REGISTER_NP_BINARY_LOGIC_CPU(name) \ NNVM_REGISTER_OP(_npi_##name) \ - .set_attr("FCompute", TVMBinaryBroadcastCompute{func_##name##_cpu}) + .set_attr("FCompute", GetBinaryBroadcastCompute{func_##name##_cpu}) #if MXNET_USE_CUDA #define MXNET_OPERATOR_REGISTER_NP_BINARY_LOGIC_GPU(name) \ NNVM_REGISTER_OP(_npi_##name) \ - .set_attr("FCompute", TVMBinaryBroadcastCompute{func_##name##_gpu}) + .set_attr("FCompute", GetBinaryBroadcastCompute{func_##name##_gpu}) MXNET_OPERATOR_REGISTER_NP_BINARY_LOGIC_GPU(equal); MXNET_OPERATOR_REGISTER_NP_BINARY_LOGIC_GPU(not_equal); diff --git a/src/operator/numpy/np_indexing_op.cc b/src/operator/numpy/np_indexing_op.cc index 3c2a041f955a..1f1fecc1c8f3 100644 --- a/src/operator/numpy/np_indexing_op.cc +++ b/src/operator/numpy/np_indexing_op.cc @@ -161,8 +161,8 @@ bool AdvancedIndexingOpBackStorageType(const nnvm::NodeAttrs& attrs, for (int &attr : *out_attrs) { attr = kDefaultStorage; } - for (size_t i = 0; i < out_attrs->size(); i++) - out_attrs->at(i) = kDefaultStorage; + for (int & out_attr : *out_attrs) + out_attr = kDefaultStorage; *dispatch_mode = DispatchMode::kFComputeEx; return true; } diff --git a/src/operator/numpy/np_polynomial_op.cc b/src/operator/numpy/np_polynomial_op.cc index 155c98fd1cc5..72df77cf2d25 100644 --- a/src/operator/numpy/np_polynomial_op.cc +++ b/src/operator/numpy/np_polynomial_op.cc @@ -22,7 +22,7 @@ * \file np_polynomial_op.cc */ -#include +#include #include "np_polynomial_op-inl.h" namespace mxnet { diff --git a/src/operator/operator_tune.cc b/src/operator/operator_tune.cc index b5e253a1872e..4c66f00b14d6 100644 --- a/src/operator/operator_tune.cc +++ b/src/operator/operator_tune.cc @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -#include +#include #include #include "./mxnet_op.h" #include "./mshadow_op.h" diff --git a/src/operator/quantization/quantize_graph_pass.cc b/src/operator/quantization/quantize_graph_pass.cc index 012134bcfa8d..ff75801af410 100644 --- a/src/operator/quantization/quantize_graph_pass.cc +++ b/src/operator/quantization/quantize_graph_pass.cc @@ -225,8 +225,8 @@ static void MarkQuantizedNodes(const Graph& src, while (!task_queue.empty()) { const auto& node = task_queue.front(); task_queue.pop(); - for (size_t i = 0; i < node->inputs.size(); ++i) { - const auto& input = node->inputs[i].node; + for (auto & i : node->inputs) { + const auto& input = i.node; auto it = support_quantize_nodes.find(input); if (it != support_quantize_nodes.end()) { it->second = it->second | kFromInput; @@ -243,8 +243,7 @@ static void MarkQuantizedNodes(const Graph& src, const auto& node = task_queue.front(); task_queue.pop(); const auto& outputs = node_output_map[node]; - for (size_t i = 0; i < outputs.size(); ++i) { - const auto& output = outputs[i]; + for (const auto & output : outputs) { auto it = support_quantize_nodes.find(output); if (it != support_quantize_nodes.end()) { it->second = it->second | kFromOutput; diff --git a/src/operator/quantization/quantized_elemwise_mul.cc b/src/operator/quantization/quantized_elemwise_mul.cc index 7d1798f14503..0988a8bcceaf 100644 --- a/src/operator/quantization/quantized_elemwise_mul.cc +++ b/src/operator/quantization/quantized_elemwise_mul.cc @@ -186,7 +186,7 @@ void QuantizedElemwiseMulOpForward(const nnvm::NodeAttrs &attrs, out_data[i] = static_cast(a * b * out_scale); } } else { - typedef int32_t out_type; + using out_type = int32_t; auto *out_data = outputs[quantized_elemwise_mul::kOut].dptr(); #if !defined(_MSC_VER) #pragma omp simd @@ -198,7 +198,7 @@ void QuantizedElemwiseMulOpForward(const nnvm::NodeAttrs &attrs, } } } else { - typedef float_t out_type; + using out_type = float_t; auto *out_data = outputs[quantized_elemwise_mul::kOut].dptr(); #if !defined(_MSC_VER) #pragma omp simd diff --git a/src/operator/quantization/quantized_fully_connected.cc b/src/operator/quantization/quantized_fully_connected.cc index d88aac86851a..e8caf79b05a9 100644 --- a/src/operator/quantization/quantized_fully_connected.cc +++ b/src/operator/quantization/quantized_fully_connected.cc @@ -154,7 +154,7 @@ struct QuantizedSumInitKernelWithBias { const float *max_out, const float *min_bias, const float *max_bias) { typedef int32_t T1; - typedef int8_t T2; + using T2 = int8_t; using mshadow::red::limits::MinValue; using mshadow::red::limits::MaxValue; float float_for_one_out_quant = diff --git a/src/operator/subgraph/build_subgraph.cc b/src/operator/subgraph/build_subgraph.cc index 413395c3b74f..38038f2a4618 100644 --- a/src/operator/subgraph/build_subgraph.cc +++ b/src/operator/subgraph/build_subgraph.cc @@ -226,9 +226,7 @@ bool LabelSubgraph(const nnvm::Graph& g, SubgraphSelectorV2Ptr subgraph_selector std::stack s; s.push(descendant); size_t count = 0; - while (!s.empty()) { - CHECK_LT(count, indexed_graph.num_nodes()) << "Finding ancestor failed. There is probably" - " a loop in the graph"; + while (!s.empty() && count < indexed_graph.num_nodes()) { ++count; const nnvm::Node* top = s.top(); s.pop(); @@ -276,10 +274,6 @@ bool LabelSubgraph(const nnvm::Graph& g, SubgraphSelectorV2Ptr subgraph_selector if (excluded_node_id != -1) { CHECK_LT(excluded_node_id, static_cast(simple_nodes.size())); - CHECK_NE(excluded_node_id, static_cast(snid)) - << "A cycle is found in the computational graph between nodes " - << simple_nodes[excluded_node_id]->node->attrs.name << " and " - << simple_nodes[snid]->node->attrs.name; excluded_nodes->insert(simple_nodes[excluded_node_id].get()); ResetNodeLabels(g, simple_nodes, subgraph_nodes); return false; @@ -306,6 +300,7 @@ void PreSelectSubgraphNodes(const nnvm::Graph& g, SubgraphSelectorV2Ptr subgraph const std::vector& simple_nodes, std::vector* subgraph_nodes) { std::unordered_set excluded_nodes; + size_t n_excluded_nodes = 0; const size_t max_num_retry = simple_nodes.size() * simple_nodes.size(); size_t count = 0; bool success = false; @@ -313,7 +308,14 @@ void PreSelectSubgraphNodes(const nnvm::Graph& g, SubgraphSelectorV2Ptr subgraph success = LabelSubgraph(g, subgraph_selector, label, snid, simple_nodes, subgraph_nodes, &excluded_nodes); if (!success) { - CHECK(!excluded_nodes.empty()); + // Failed to label subgraph due to a cycle + // If the number of excluded_nodes didn't change since the last iteration, + // this means that there is no possible subgraph for the current node snid, we break + // Otherwise, we keep trying (with the excluded nodes tagged) + if (excluded_nodes.size() == n_excluded_nodes) { + break; + } + n_excluded_nodes = excluded_nodes.size(); std::string excluded_node_names; for (auto node : excluded_nodes) { excluded_node_names += node->node->attrs.name + ", "; @@ -428,7 +430,7 @@ void SortEntries(const std::unordered_map& entry } /*! - * \brief Given a subgraph, find the output entries of a subgraph. + * \brief Given a subgraph, find the input entries of a subgraph. * \param g pointer to the whole graph * \param simple_nods vector of simple nodes in top sorted order * \param subgraph_nodes vector of pointers of simples of a subgraph. diff --git a/src/operator/subgraph/default_subgraph_property.cc b/src/operator/subgraph/default_subgraph_property.cc index dd3bfd14ae28..ff51b6397c04 100644 --- a/src/operator/subgraph/default_subgraph_property.cc +++ b/src/operator/subgraph/default_subgraph_property.cc @@ -17,6 +17,8 @@ * under the License. */ +#include + #include "./common.h" #include "./subgraph_property.h" #include "../../imperative/cached_op.h" @@ -33,15 +35,15 @@ class ContainOpSelector: public SubgraphSelector { explicit ContainOpSelector(const std::unordered_set& op_names) : op_names_(op_names) {} - virtual bool Select(const nnvm::Node &seed_node) { + bool Select(const nnvm::Node &seed_node) override { return !seed_node.is_variable() && op_names_.count(seed_node.op()->name); } - virtual bool SelectInput(const nnvm::Node &cur_node, const nnvm::Node &input_node) { + bool SelectInput(const nnvm::Node &cur_node, const nnvm::Node &input_node) override { return !input_node.is_variable() && op_names_.count(input_node.op()->name); } - virtual bool SelectOutput(const nnvm::Node &cur_node, const nnvm::Node &output_node) { + bool SelectOutput(const nnvm::Node &cur_node, const nnvm::Node &output_node) override { return !output_node.is_variable() && op_names_.count(output_node.op()->name); } private: @@ -55,19 +57,19 @@ class ContainOpSelector: public SubgraphSelector { class DefaultSubgraphProperty: public SubgraphProperty { public: static SubgraphPropertyPtr Create() { return std::make_shared(); } - virtual nnvm::ObjectPtr CreateSubgraphNode(const nnvm::Symbol &sym, - const int subgraph_id = 0) const { + nnvm::ObjectPtr CreateSubgraphNode(const nnvm::Symbol &sym, + const int subgraph_id = 0) const override { nnvm::ObjectPtr n = nnvm::Node::Create(); n->attrs.op = Op::Get("_CachedOp"); n->attrs.name = "_CachedOp" + std::to_string(subgraph_id); n->attrs.subgraphs.push_back(std::make_shared(sym)); std::vector > flags{{"static_alloc", "true"}}; - n->attrs.parsed = CachedOpPtr(new CachedOp(sym, flags)); + n->attrs.parsed = std::make_shared(sym, flags); return n; } - virtual SubgraphSelectorPtr CreateSubgraphSelector() const { + SubgraphSelectorPtr CreateSubgraphSelector() const override { return std::make_shared( this->GetAttr>("op_names")); } diff --git a/src/operator/subgraph/default_subgraph_property_v2.cc b/src/operator/subgraph/default_subgraph_property_v2.cc index 65aaeb1f45ce..7c942300ad12 100644 --- a/src/operator/subgraph/default_subgraph_property_v2.cc +++ b/src/operator/subgraph/default_subgraph_property_v2.cc @@ -18,6 +18,8 @@ */ +#include + #include "./common.h" #include "./subgraph_property.h" #include "../../imperative/cached_op.h" @@ -68,7 +70,7 @@ class DefaultSubgraphProperty: public SubgraphProperty { n->attrs.subgraphs.push_back(std::make_shared(sym)); std::vector > flags{{"static_alloc", "true"}}; - n->attrs.parsed = CachedOpPtr(new CachedOp(sym, flags)); + n->attrs.parsed = std::make_shared(sym, flags); return n; } diff --git a/src/operator/subgraph/tensorrt/onnx_to_tensorrt.cc b/src/operator/subgraph/tensorrt/onnx_to_tensorrt.cc index b02d1094183f..4f5bdcb8561c 100644 --- a/src/operator/subgraph/tensorrt/onnx_to_tensorrt.cc +++ b/src/operator/subgraph/tensorrt/onnx_to_tensorrt.cc @@ -35,13 +35,9 @@ #include #include #include -#include #include #include -#include -#include - using std::cout; using std::cerr; using std::endl; @@ -78,7 +74,9 @@ std::tuple, auto trt_logger = std::unique_ptr(new TRT_Logger(verbosity)); auto trt_builder = InferObject(nvinfer1::createInferBuilder(*trt_logger)); - auto trt_network = InferObject(trt_builder->createNetwork()); + const auto explicitBatch = 1U << static_cast( + nvinfer1::NetworkDefinitionCreationFlag::kEXPLICIT_BATCH); + auto trt_network = InferObject(trt_builder->createNetworkV2(explicitBatch)); auto trt_parser = InferObject(nvonnxparser::createParser(*trt_network, *trt_logger)); ::ONNX_NAMESPACE::ModelProto parsed_model; // We check for a valid parse, but the main effect is the side effect diff --git a/src/operator/subgraph/tensorrt/tensorrt-inl.h b/src/operator/subgraph/tensorrt/tensorrt-inl.h index 16cc13006d59..b35a1715000e 100644 --- a/src/operator/subgraph/tensorrt/tensorrt-inl.h +++ b/src/operator/subgraph/tensorrt/tensorrt-inl.h @@ -267,6 +267,23 @@ class TensorrtProperty : public SubgraphProperty { return std::make_shared(); } + void PrePartition(const nnvm::Graph& g, + const std::vector>& options_map) override { + auto& in_arg_names = g.GetAttr>("in_arg_names"); + auto& in_aux_names = g.GetAttr>("in_aux_names"); + NDArray **in_args_ptr = g.GetAttr("in_args"); + NDArray **in_aux_ptr = g.GetAttr("in_aux"); + in_args_dict.clear(); + in_aux_dict.clear(); + // we trust the Python API, len(in_arg_names) == len(in_args_ptr) + for (unsigned i = 0; i < in_arg_names.size(); ++i) { + in_args_dict[in_arg_names[i]] = in_args_ptr[i]; + } + for (unsigned i = 0; i < in_aux_names.size(); ++i) { + in_aux_dict[in_aux_names[i]] = in_aux_ptr[i]; + } + } + nnvm::ObjectPtr CreateSubgraphNode(const nnvm::Symbol &sym, const int subgraph_id) const override { nnvm::ObjectPtr n = nnvm::Node::Create(); @@ -280,16 +297,33 @@ class TensorrtProperty : public SubgraphProperty { n->attrs.op = Op::Get("_TensorRT"); CHECK(n->attrs.op); n->attrs.subgraphs.emplace_back(std::make_shared(new_sym)); + + // Mapping subgraph params with NDArrays + TRTParam param; std::ostringstream params_oss; - for (auto &e : new_sym.ListInputNames(nnvm::Symbol::kAll)) { - params_oss << e << ";"; + for (auto ¶m_name : new_sym.ListInputNames(nnvm::Symbol::kAll)) { + NDArray *cache; + auto it_args = in_args_dict.find(param_name); + if (it_args != in_args_dict.end()) { + cache = it_args->second; + } else { + auto it_aux = in_aux_dict.find(param_name); + if (it_aux != in_aux_dict.end()) { + cache = it_aux->second; + } + } + if (cache != nullptr) { + param.params_map.emplace(param_name, cache->Copy(Context())); + param.params_map[param_name].WaitToRead(); + params_oss << param_name << ";"; + } } auto tensorrt_params_names = params_oss.str(); - tensorrt_params_names.pop_back(); - n->attrs.dict["subgraph_params_names"] = tensorrt_params_names; - TRTParam param; + if (!tensorrt_params_names.empty()) { + tensorrt_params_names.pop_back(); + } n->attrs.parsed = param; - n->op()->attr_parser(&(n->attrs)); + n->attrs.dict["subgraph_params_names"] = tensorrt_params_names; return n; } @@ -328,6 +362,8 @@ class TensorrtProperty : public SubgraphProperty { } subgraph_node->attrs.parsed = std::move(_params); } + + std::unordered_map in_args_dict, in_aux_dict; }; diff --git a/src/operator/subgraph/tensorrt/tensorrt.cu b/src/operator/subgraph/tensorrt/tensorrt.cu index 4a5b23b3a9f7..826f9a5876b6 100644 --- a/src/operator/subgraph/tensorrt/tensorrt.cu +++ b/src/operator/subgraph/tensorrt/tensorrt.cu @@ -56,12 +56,12 @@ void TRTCompute(const OpStatePtr& state, const OpContext& ctx, param.bindings->at(i) = outputs[p.first].dptr_; } } - const int batch_size = static_cast(inputs[0].shape_[0]); - param.trt_executor->enqueue(batch_size, param.bindings->data(), cuda_s, nullptr); + param.trt_executor->enqueueV2(param.bindings->data(), cuda_s, nullptr); } NNVM_REGISTER_OP(_TensorRT) -.set_attr("FStatefulCompute", TRTCompute); +.set_attr("FStatefulCompute", TRTCompute) +.set_attr("FGradient", MakeZeroGradNodes); } // namespace op } // namespace mxnet diff --git a/src/operator/tensor/broadcast_reduce_norm_value.cc b/src/operator/tensor/broadcast_reduce_norm_value.cc index 557c4d9e7746..43a22b2a8314 100644 --- a/src/operator/tensor/broadcast_reduce_norm_value.cc +++ b/src/operator/tensor/broadcast_reduce_norm_value.cc @@ -87,6 +87,7 @@ Examples:: norm(csr) = [5.47722578] )code" ADD_FILELINE) +.add_alias("_npx_norm") .set_num_inputs(1) .set_num_outputs(1) .set_attr_parser(ParamParser) diff --git a/src/operator/tensor/la_op-inl.h b/src/operator/tensor/la_op-inl.h index d580cced4ec5..7a5a602425fe 100644 --- a/src/operator/tensor/la_op-inl.h +++ b/src/operator/tensor/la_op-inl.h @@ -36,9 +36,10 @@ using namespace mshadow; // Copies lower/upper triangular part to upper/lower, i.e. to the opposite side. struct CopyTriangularToOppositeSide { template - MSHADOW_XINLINE static void Map(int i, int matrix_size, int stride, DType* data, bool to_lower) { + MSHADOW_XINLINE static void Map(index_t i, size_t matrix_size, index_t stride, + DType* data, bool to_lower) { // Below computation works even when we are dealing with a batch of matrices. - const int row((i % matrix_size) / stride), col(i % stride); + const index_t row((i % matrix_size) / stride), col(i % stride); if (row > col) { if (to_lower) { data[i] = data[i + (col - row) * (stride - 1)]; @@ -52,9 +53,9 @@ struct CopyTriangularToOppositeSide { // Zero's lower/upper triangular part of a matrix. struct ZeroTriangular { template - MSHADOW_XINLINE static void Map(int i, int matrix_size, int stride, DType* data, - bool zero_lower) { - const int row((i % matrix_size) / stride), col(i % stride); + MSHADOW_XINLINE static void Map(index_t i, size_t matrix_size, index_t stride, + DType* data, bool zero_lower) { + const index_t row((i % matrix_size) / stride), col(i % stride); if ((!zero_lower && (row < col)) || (zero_lower && (row > col))) data[i] = 0; } }; diff --git a/src/profiler/aggregate_stats.cc b/src/profiler/aggregate_stats.cc index 86791ebf3074..9d56dd35d6c2 100644 --- a/src/profiler/aggregate_stats.cc +++ b/src/profiler/aggregate_stats.cc @@ -235,8 +235,8 @@ void AggregateStats::DumpJson(std::ostream& os, int sort_by, int ascending) { << " }" << std::endl << "," << std::endl << " \"Unit\": {" << std::endl - << " \"Time\": \"ms\"," << std::endl - << " \"Memory\": \"kB\"" << std::endl + << R"( "Time": "ms",)" << std::endl + << R"( "Memory": "kB")" << std::endl << " }" << std::endl << "}" << std::endl << std::flush; diff --git a/src/profiler/profiler.cc b/src/profiler/profiler.cc index 13ab462ab69c..080d0454faff 100644 --- a/src/profiler/profiler.cc +++ b/src/profiler/profiler.cc @@ -154,9 +154,9 @@ void Profiler::SetConfig(int mode, */ void Profiler::EmitPid(std::ostream *os, const std::string& name, size_t pid) { (*os) << " {\n" - << " \"ph\": \"" << static_cast(ProfileStat::kMetadata) << "\",\n" + << R"( "ph": ")" << static_cast(ProfileStat::kMetadata) << "\",\n" << " \"args\": {\n" - << " \"name\": \"" << name << "\"\n" + << R"( "name": ")" << name << "\"\n" << " },\n" << " \"pid\": " << pid << ",\n" << " \"name\": \"process_name\"\n" @@ -246,7 +246,7 @@ void Profiler::DumpProfile(bool perform_cleanup) { if (last_pass) { file << "\n" << std::endl; file << " ]," << std::endl; - file << " \"displayTimeUnit\": \"ms\"" << std::endl; + file << R"( "displayTimeUnit": "ms")" << std::endl; file << "}" << std::endl; } enable_output_ = continuous_dump_ && !last_pass; // If we're appending, then continue. diff --git a/src/resource.cc b/src/resource.cc index 9f5ecaf89b27..28e24e5c6984 100644 --- a/src/resource.cc +++ b/src/resource.cc @@ -31,6 +31,7 @@ #include #include #include +#include #include "./common/lazy_alloc_array.h" #include "./common/utils.h" #include "./common/cuda_utils.h" @@ -91,8 +92,7 @@ struct SpaceAllocator { // Implements resource manager class ResourceManagerImpl : public ResourceManager { public: - ResourceManagerImpl() noexcept(false) - : global_seed_(0) { + ResourceManagerImpl() noexcept(false) { cpu_temp_space_copy_ = dmlc::GetEnv("MXNET_CPU_TEMP_COPY", 4); gpu_temp_space_copy_ = dmlc::GetEnv("MXNET_GPU_TEMP_COPY", 1); cpu_native_rand_copy_ = dmlc::GetEnv("MXNET_CPU_PARALLEL_RAND_COPY", 1); @@ -102,14 +102,14 @@ class ResourceManagerImpl : public ResourceManager { #endif // MXNET_USE_CUDNN == 1 engine_ref_ = Engine::_GetSharedRef(); storage_ref_ = Storage::_GetSharedRef(); - cpu_rand_.reset(new ResourceRandom( - Context::CPU(), global_seed_)); - cpu_space_.reset(new ResourceTempSpace( - Context::CPU(), cpu_temp_space_copy_)); - cpu_parallel_rand_.reset(new ResourceParallelRandom( - Context::CPU(), cpu_native_rand_copy_, global_seed_)); + cpu_rand_ = std::make_unique>( + Context::CPU(), global_seed_); + cpu_space_ = std::make_unique>( + Context::CPU(), cpu_temp_space_copy_); + cpu_parallel_rand_ = std::make_unique>( + Context::CPU(), cpu_native_rand_copy_, global_seed_); } - ~ResourceManagerImpl() { + ~ResourceManagerImpl() override { // need explicit delete, before engine get killed cpu_rand_.reset(nullptr); cpu_space_.reset(nullptr); @@ -390,7 +390,7 @@ class ResourceManagerImpl : public ResourceManager { /*! \brief Reference to the storage */ std::shared_ptr storage_ref_; /*! \brief internal seed to the random number generator */ - uint32_t global_seed_; + uint32_t global_seed_{0}; /*! \brief CPU random number resources */ std::unique_ptr > cpu_rand_; /*! \brief CPU temp space resources */ diff --git a/src/runtime/registry.cc b/src/runtime/registry.cc index 276c1ba73d18..d1511806aa27 100644 --- a/src/runtime/registry.cc +++ b/src/runtime/registry.cc @@ -44,7 +44,7 @@ struct Registry::Manager { std::mutex mutex; // vtable for extension type is not suported for now - Manager() {} + Manager() = default; static Manager* Global() { // We deliberately leak the Manager instance, to avoid leak sanitizers diff --git a/src/storage/storage.cc b/src/storage/storage.cc index 438a6b872021..f359b30f151e 100644 --- a/src/storage/storage.cc +++ b/src/storage/storage.cc @@ -44,7 +44,7 @@ class StorageImpl : public Storage { void SharedIncrementRefCount(Handle handle) override; StorageImpl() = default; - virtual ~StorageImpl() = default; + ~StorageImpl() override = default; private: std::shared_ptr storage_manager(const Context &ctx) { diff --git a/tests/README.md b/tests/README.md index 1d34f6446c33..f26beec1c8fe 100644 --- a/tests/README.md +++ b/tests/README.md @@ -64,7 +64,7 @@ Ninja is a build tool (like make) that prioritizes building speed. If you will b To run tests inside docker, you first need to install `docker` and `docker-compose` on your machine. -On Ubuntu you may install them via `sudo apt-get install docker.io docker-compose` +On Ubuntu you may install them via `sudo apt-get install docker.io docker-compose python3-docker` and set them up via `sudo usermod $(whoami) -G docker -a`. Then, to run tests inside docker run the following command @@ -73,11 +73,10 @@ Then, to run tests inside docker run the following command ci/build.py --platform {PLATFORM} /work/runtime_functions.sh {RUNTIME_FUNCTION} ``` -An example for running python tests would be +An example for running python tests on Ubuntu with a CPU would be ``` -ci/build.py --platform build_ubuntu_cpu_mkldnn /work/runtime_functions.sh unittest_ubuntu_python3_cpu +ci/build.py --platform ubuntu_cpu /work/runtime_functions.sh unittest_ubuntu_python3_cpu ``` - - +See [Continuous Integration](../ci/README.md) diff --git a/tests/cpp/engine/thread_local_test.cc b/tests/cpp/engine/thread_local_test.cc index f842b1d52018..6801b377ef83 100644 --- a/tests/cpp/engine/thread_local_test.cc +++ b/tests/cpp/engine/thread_local_test.cc @@ -23,7 +23,6 @@ * \brief Tests thread safety and lifetime of thread local store */ #include -#include #include #include #include @@ -31,6 +30,7 @@ #include #include #include +#include #include #include #include diff --git a/tests/cpp/engine/threaded_engine_test.cc b/tests/cpp/engine/threaded_engine_test.cc index e1e3a53e656c..11ca2c94c1c0 100644 --- a/tests/cpp/engine/threaded_engine_test.cc +++ b/tests/cpp/engine/threaded_engine_test.cc @@ -22,7 +22,6 @@ * \file threaded_engine_test.cc * \brief threaded engine tests */ -#include #include #include #include @@ -31,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -107,7 +107,7 @@ double EvaluateWorkloads(const std::vector& workloads, for (const auto& wl : workloads) { if (wl.reads.size() == 0) continue; - if (engine == NULL) { + if (engine == nullptr) { EvaluateWorkload(wl, data); } else { auto func = [wl, data](RunContext ctx, Engine::CallbackOnComplete cb) { @@ -152,13 +152,13 @@ TEST(Engine, RandSumExpr) { std::vector t(num_engine, 0.0); std::vector engine(num_engine); - engine[0] = NULL; + engine[0] = nullptr; engine[1] = mxnet::engine::CreateNaiveEngine(); engine[2] = mxnet::engine::CreateThreadedEnginePooled(); engine[3] = mxnet::engine::CreateThreadedEnginePerDevice(); for (int repeat = 0; repeat < num_repeat; ++repeat) { - srand(time(NULL) + repeat); + srand(time(nullptr) + repeat); int num_var = 100; GenerateWorkload(10000, num_var, 2, 20, 1, 10, &workloads); std::vector> data(num_engine); diff --git a/tests/cpp/operator/batchnorm_test.cc b/tests/cpp/operator/batchnorm_test.cc index 22bcb70387a8..dab8c98a7da8 100644 --- a/tests/cpp/operator/batchnorm_test.cc +++ b/tests/cpp/operator/batchnorm_test.cc @@ -277,7 +277,7 @@ class BatchNormValidator : public test::op::Validator { typedef test::op::Validator Super; /*! \brief Only static functions in this class */ - BatchNormValidator() = delete; + BatchNormValidator() = delete; // NOLINT /*! \brief Check batch norm output - 1D */ static void checkBatchNorm1D(const TBlob *blob) { @@ -566,10 +566,9 @@ static const test::op::kwargs_t nfs_ugs_kwargs_nocudnn = { #if !DISABLE_VALIDATION static bool isUGS(const test::op::kwargs_t& kwargs) { - for (test::op::kwargs_t::const_iterator i = kwargs.begin(), - e = kwargs.end(); i != e; ++i) { - if (!i->first.compare("use_global_stats")) { - return i->second.compare("True") == 0; + for (const auto & kwarg : kwargs) { + if (!kwarg.first.compare("use_global_stats")) { + return kwarg.second.compare("True") == 0; } } return false; @@ -725,8 +724,8 @@ static test::op::OpInfoPair test size_t thisCount = 0; - typedef typename OperatorExecutor::DataType DType; - typedef typename OperatorExecutor::AccRealType AccReal; + using DType = typename OperatorExecutor::DataType; + using AccReal = typename OperatorExecutor::AccRealType; do { const bool isLast = thisCount == cycleCount - 1; @@ -1288,8 +1287,8 @@ static void testSaveAndLoad(const std::vector& dims, TEST(BATCH_NORM, TestChannelAxisSaveAndLoad) { std::cout << std::endl << std::flush; - typedef float DType; - typedef float AccReal; + using DType = float; + using AccReal = float; const std::vector> myData = { { 1.0f, 1.0f, 1.0f, 1.0f }, @@ -1346,8 +1345,8 @@ static void runChannelAxisTest( const size_t numberOfPasses = 5 ) { - typedef float DType; - typedef float AccReal; + using DType = float; + using AccReal = float; size_t spatialSize = 1; for (size_t x = 1, n = shape.size(); x < n; ++x) { diff --git a/tests/cpp/operator/runner/core_op_runner_test.cc b/tests/cpp/operator/runner/core_op_runner_test.cc index 96458cd1c713..6e6cb91096fe 100644 --- a/tests/cpp/operator/runner/core_op_runner_test.cc +++ b/tests/cpp/operator/runner/core_op_runner_test.cc @@ -148,7 +148,7 @@ TEST(CORE_OP_RUNNER, ExecuteBidirectionalRunnerSimpleUnary) { } TEST(CORE_OP_RUNNER, ExecuteBidirectionalRunner) { - typedef float DType; + using DType = float; mxnet::TShape shape({5, 5}); for (const std::pair& i : test_binary_operators) { const char *op_name = i.first.c_str(); @@ -163,7 +163,7 @@ TEST(CORE_OP_RUNNER, ExecuteBidirectionalRunner) { * \brief Test RunBidirectional dot product, which has different shaped inputs and outputs */ TEST(CORE_OP_RUNNER, ExecuteBidirectionalRunnerDotProduct) { - typedef float DType; + using DType = float; const char *op_name = "dot"; const char *backward_op_name = "_backward_dot"; test::op::CoreOperatorRunner runner; @@ -179,7 +179,7 @@ TEST(CORE_OP_RUNNER, ExecuteBidirectionalRunnerDotProduct) { * \brief Timing tests for CPU */ TEST(CORE_OP_RUNNER, TimingCPUSimpleUnary) { - typedef float DType; + using DType = float; const char *op_name = "relu"; @@ -210,7 +210,7 @@ TEST(CORE_OP_RUNNER, TimingCPUSimpleUnary) { } TEST(CORE_OP_RUNNER, TimingCPUBinary) { - typedef float DType; + using DType = float; const char *op_name = "elemwise_add"; const char *backward_op_name = "_backward_add"; @@ -246,7 +246,7 @@ TEST(CORE_OP_RUNNER, TimingCPUBinary) { * \brief Performance run dot product, which has different shaped inputs and outputs */ TEST(CORE_OP_RUNNER, TimingCPUBinaryDotProduct) { - typedef float DType; + using DType = float; const char *op_name = "dot"; const char *backward_op_name = "_backward_dot"; diff --git a/tests/cpp/storage/storage_test.cc b/tests/cpp/storage/storage_test.cc index 3934c091faef..d9e7d8bc0294 100644 --- a/tests/cpp/storage/storage_test.cc +++ b/tests/cpp/storage/storage_test.cc @@ -21,11 +21,11 @@ * \file storage_test.cc * \brief cpu/gpu storage tests */ -#include #include #include #include #include +#include #include "test_util.h" TEST(Storage, Basic_CPU) { diff --git a/tests/jenkins/run_test.sh b/tests/jenkins/run_test.sh deleted file mode 100755 index 59516d46bcd0..000000000000 --- a/tests/jenkins/run_test.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - - -# Exit script with error if any errors occur - -echo "BUILD make" -cp make/config.mk . -echo "USE_CUDA=1" >> config.mk -echo "USE_CUDA_PATH=/usr/local/cuda" >> config.mk -echo "USE_CUDNN=1" >> config.mk -echo "DEV=1" >> config.mk -echo "EXTRA_OPERATORS=example/ssd/operator" >> config.mk -echo "USE_CPP_PACKAGE=1" >> config.mk - -set -e - -make -j$(nproc) || exit -1 - -echo "BUILD cpp_test" -make -j$(nproc) test || exit -1 -export MXNET_ENGINE_INFO=true -./build/tests/cpp/mxnet_test - -export MXNET_ENGINE_INFO=false -export PYTHONPATH=$(pwd)/python - -echo "BUILD python_test" -pytest --verbose tests/python/unittest || exit -1 -pytest --verbose tests/python/gpu/test_operator_gpu.py || exit -1 -pytest --verbose tests/python/train || exit -1 - -echo "BUILD scala_test" -export PATH=$PATH:/opt/apache-maven/bin -cd scala-package -mvn install || exit -1 - -# echo "BUILD julia_test" -# export MXNET_HOME="${PWD}" -# /home/ubuntu/julia/bin/julia -e 'try Pkg.clone("MXNet"); catch end; Pkg.checkout("MXNet"); Pkg.build("MXNet"); Pkg.test("MXNet")' || exit -1 diff --git a/tests/jenkins/run_test_amzn_linux_gpu.sh b/tests/jenkins/run_test_amzn_linux_gpu.sh deleted file mode 100755 index a257b9684ba0..000000000000 --- a/tests/jenkins/run_test_amzn_linux_gpu.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - - -# Exit script with error if any errors occur - -echo "BUILD make" -cp make/config.mk . -echo "USE_CUDA=0" >> config.mk -echo "USE_CUDNN=0" >> config.mk -echo "USE_BLAS=openblas" >> config.mk -echo "USE_CPP_PACKAGE=1" >> config.mk -echo "ADD_CFLAGS += -I/usr/include/openblas" >>config.mk -echo "GTEST_PATH=/usr/local/gtest" >> config.mk -echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.profile -echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.profile -JAVA_HOME=`/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.*.amzn1.x86_64[-1]` -echo 'export JAVA_HOME=${JAVA_HOME}' >> ~/.profile -echo 'export JRE_HOME=${JAVA_HOME}/jre' >> ~/.profile -echo 'export PATH=$PATH:/apache-maven-3.3.9/bin/:/usr/bin:${JAVA_HOME}/bin' >> ~/.profile -source ~/.profile -user=`id -u -n` - -set -e - -make -j 4 - -echo "BUILD cpp_test" -make -j 4 test -export MXNET_ENGINE_INFO=true -./build/tests/cpp/mxnet_test - -echo "BUILD valgrind_test" -valgrind ./build/tests/cpp/mxnet_test - -export MXNET_ENGINE_INFO=false -export PYTHONPATH=${PWD}/python - -echo "BUILD python_test" -pytest --verbose tests/python/unittest -pytest --verbose tests/python/train - -#echo "BUILD julia_test" -#export MXNET_HOME="${PWD}" -#julia -e 'try Pkg.clone("MXNet"); catch end; Pkg.checkout("MXNet"); Pkg.build("MXNet"); Pkg.test("MXNet")' || exit -1 - -echo "BUILD scala_test" -cd scala-package -mvn integration-test diff --git a/tests/jenkins/run_test_ubuntu.sh b/tests/jenkins/run_test_ubuntu.sh deleted file mode 100755 index 835bce9aeef7..000000000000 --- a/tests/jenkins/run_test_ubuntu.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - - -set -e - -echo "BUILD make" - -WITH_CAFFE_PLUGIN=0 - -if [ "$WITH_CAFFE_PLUGIN" == "1" ]; then -# Check out caffe - git clone https://github.com/BVLC/caffe - mkdir -p caffe/build - cd caffe/build - cmake .. - make -j$(nproc) - cd ../.. -fi - -cp make/config.mk . -echo "USE_CUDA=1" >> config.mk -echo "USE_CUDA_PATH=/usr/local/cuda" >> config.mk -echo "USE_CUDNN=1" >> config.mk -echo "DEV=1" >> config.mk -echo "EXTRA_OPERATORS=example/ssd/operator" >> config.mk -echo "USE_CPP_PACKAGE=1" >> config.mk - -if [ "$WITH_CAFFE_PLUGIN" == "1" ]; then - echo "CAFFE_PATH = $(pwd)/caffe" >> config.mk - echo "MXNET_PLUGINS += plugin/caffe/caffe.mk" >> config.mk -fi - -user=`id -u -n` - -make -j$(nproc) - -export PYTHONPATH=${PWD}/python - -echo "BUILD python_test" -pytest --verbose tests/python/unittest || exit 1 -pytest --verbose tests/python/gpu/test_operator_gpu.py || exit 1 -pytest --verbose tests/python/train || exit 1 - -echo "BUILD scala_test" -export PATH=$PATH:/opt/apache-maven/bin -cd scala-package -mvn integration-test || exit 1 - diff --git a/tests/nightly/apache_rat_license_check/README.md b/tests/nightly/apache_rat_license_check/README.md index 70ec665fa57f..388aaca3922d 100644 --- a/tests/nightly/apache_rat_license_check/README.md +++ b/tests/nightly/apache_rat_license_check/README.md @@ -31,7 +31,7 @@ The following commands can be used to run a Apache RAT check locally - Docker based 1-click-method: ``` -ci/build.py -p ubuntu_rat nightly_test_rat_check +ci/build.py -p ubuntu_cpu test_rat_check ``` Manual method: diff --git a/tests/python/gpu/test_device.py b/tests/python/gpu/test_device.py index 52e09c029b49..76a32def33f5 100644 --- a/tests/python/gpu/test_device.py +++ b/tests/python/gpu/test_device.py @@ -20,8 +20,7 @@ import pytest import os import logging - -from mxnet.test_utils import EnvManager +from mxnet.test_utils import environment shapes = [(10), (100), (1000), (10000), (100000), (2,2), (2,3,4,5,6,7,8)] keys = [1,2,3,4,5,6,7] @@ -51,16 +50,15 @@ def check_dense_pushpull(kv_type): for x in range(n_gpus): assert(np.sum(np.abs((res[x]-n_gpus).asnumpy()))==0) - kvstore_tree_array_bound = 'MXNET_KVSTORE_TREE_ARRAY_BOUND' - kvstore_usetree_values = ['','1'] - kvstore_usetree = 'MXNET_KVSTORE_USETREE' - for _ in range(2): + kvstore_tree_array_bound_values = [None, '1'] + kvstore_usetree_values = [None, '1'] + for y in kvstore_tree_array_bound_values: for x in kvstore_usetree_values: - with EnvManager(kvstore_usetree, x): + with environment({'MXNET_KVSTORE_USETREE': x, + 'MXNET_KVSTORE_TREE_ARRAY_BOUND': y}): check_dense_pushpull('local') check_dense_pushpull('device') - os.environ[kvstore_tree_array_bound] = '1' - del os.environ[kvstore_tree_array_bound] + if __name__ == '__main__': test_device_pushpull() diff --git a/tests/python/gpu/test_fusion.py b/tests/python/gpu/test_fusion.py index 8d3ce47c18e8..1f261adcebac 100644 --- a/tests/python/gpu/test_fusion.py +++ b/tests/python/gpu/test_fusion.py @@ -15,8 +15,10 @@ # specific language governing permissions and limitations # under the License. +import sys import os import random +import itertools import mxnet as mx import numpy as np from mxnet import autograd, gluon @@ -24,7 +26,7 @@ curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) sys.path.insert(0, os.path.join(curr_path, '../unittest')) -from common import with_seed +from common import setup_module, teardown_module, with_seed def check_fused_symbol(sym, **kwargs): inputs = sym.list_inputs() @@ -44,10 +46,10 @@ def check_fused_symbol(sym, **kwargs): data = {inp : kwargs[inp].astype(dtype) for inp in inputs} for grad_req in ['write', 'add']: type_dict = {inp : dtype for inp in inputs} - os.environ["MXNET_USE_FUSION"] = "0" - orig_exec = test_sym._simple_bind(ctx=ctx, grad_req=grad_req, type_dict=type_dict, **shapes) - os.environ["MXNET_USE_FUSION"] = "1" - fused_exec = test_sym._simple_bind(ctx=ctx, grad_req=grad_req, type_dict=type_dict, **shapes) + with environment('MXNET_USE_FUSION', '0'): + orig_exec = test_sym._simple_bind(ctx=ctx, grad_req=grad_req, type_dict=type_dict, **shapes) + with environment('MXNET_USE_FUSION', '1'): + fused_exec = test_sym._simple_bind(ctx=ctx, grad_req=grad_req, type_dict=type_dict, **shapes) fwd_orig = orig_exec.forward(is_train=True, **data) out_grads = [mx.nd.ones_like(arr) for arr in fwd_orig] orig_exec.backward(out_grads=out_grads) @@ -231,6 +233,7 @@ def check_other_ops(): arr2 = mx.random.uniform(shape=(2,2,2,3)) check_fused_symbol(mx.sym.broadcast_like(a, b, lhs_axes=[0], rhs_axes=[0]), a=arr1, b=arr2) + def check_leakyrelu_ops(): a = mx.sym.Variable('a') b = mx.sym.Variable('b') @@ -331,18 +334,18 @@ def hybrid_forward(self, F, x, y, z): arrays = {} for use_fusion in ('0', '1'): - os.environ['MXNET_USE_FUSION'] = use_fusion - arrays[use_fusion] = {} - n = Block() - n.hybridize(static_alloc=static_alloc) - args = [arg.copyto(mx.gpu()) for arg in arg_data] - for arg in args: - arg.attach_grad() - with autograd.record(): - r = n(*args) - arrays[use_fusion]['result'] = r - r.backward() - for i, arg in enumerate(args): - arrays[use_fusion][i] = arg.grad + with environment('MXNET_USE_FUSION', use_fusion): + arrays[use_fusion] = {} + n = Block() + n.hybridize(static_alloc=static_alloc) + args = [arg.copyto(mx.gpu()) for arg in arg_data] + for arg in args: + arg.attach_grad() + with autograd.record(): + r = n(*args) + arrays[use_fusion]['result'] = r + r.backward() + for i, arg in enumerate(args): + arrays[use_fusion][i] = arg.grad for key in ['result'] + list(range(len(arg_data))): assert_allclose(arrays['0'][key].asnumpy(), arrays['1'][key].asnumpy()) diff --git a/tests/python/gpu/test_gluon_gpu.py b/tests/python/gpu/test_gluon_gpu.py index e259b74b9fad..27325dbcf3c1 100644 --- a/tests/python/gpu/test_gluon_gpu.py +++ b/tests/python/gpu/test_gluon_gpu.py @@ -21,7 +21,7 @@ import time import mxnet as mx import multiprocessing as mp -from mxnet.test_utils import check_consistency, set_default_context, assert_almost_equal, rand_ndarray +from mxnet.test_utils import check_consistency, set_default_context, assert_almost_equal, rand_ndarray, environment import mxnet.ndarray as nd import numpy as np import math @@ -33,6 +33,7 @@ from common import setup_module, with_seed, teardown_module, assert_raises_cudnn_not_satisfied, run_in_spawned_process from test_gluon import * from test_loss import * +from test_numpy_loss import * from test_gluon_rnn import * set_default_context(mx.gpu(0)) @@ -558,9 +559,9 @@ def _test_bulking(test_bulking_func): time_per_iteration = mp.Manager().Value('d', 0.0) if not run_in_spawned_process(test_bulking_func, - {'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_FWD': seg_sizes[0], - 'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_BWD': seg_sizes[1], - 'MXNET_EXEC_BULK_EXEC_TRAIN': seg_sizes[2]}, + {'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_FWD': str(seg_sizes[0]), + 'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_BWD': str(seg_sizes[1]), + 'MXNET_EXEC_BULK_EXEC_TRAIN': str(seg_sizes[2])}, time_per_iteration): # skip test since the python version can't run it properly. Warning msg was logged. return @@ -634,13 +635,15 @@ def test_gemms_true_fp16(): net.cast('float16') net.initialize(ctx=ctx) net.weight.set_data(weights) - ref_results = net(input) - os.environ["MXNET_FC_TRUE_FP16"] = "1" - results_trueFP16 = net(input) + with environment('MXNET_FC_TRUE_FP16', '0'): + ref_results = net(input) + + with environment('MXNET_FC_TRUE_FP16', '1'): + results_trueFP16 = net(input) + atol = 1e-2 rtol = 1e-2 assert_almost_equal(ref_results.asnumpy(), results_trueFP16.asnumpy(), atol=atol, rtol=rtol) - os.environ["MXNET_FC_TRUE_FP16"] = "0" diff --git a/tests/python/gpu/test_kvstore_gpu.py b/tests/python/gpu/test_kvstore_gpu.py index 5167970bb8f8..d836e970181d 100644 --- a/tests/python/gpu/test_kvstore_gpu.py +++ b/tests/python/gpu/test_kvstore_gpu.py @@ -21,7 +21,7 @@ import mxnet as mx import numpy as np import pytest -from mxnet.test_utils import assert_almost_equal, default_context, EnvManager +from mxnet.test_utils import assert_almost_equal, default_context, environment curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) sys.path.insert(0, os.path.join(curr_path, '../unittest')) from common import setup_module, with_seed, teardown_module @@ -99,11 +99,11 @@ def check_rsp_pull(kv, ctxs, sparse_pull, is_same_rowid=False, use_slice=False): check_rsp_pull(kv, [mx.gpu(i//2) for i in range(4)], sparse_pull, use_slice=True) check_rsp_pull(kv, [mx.cpu(i) for i in range(4)], sparse_pull, use_slice=True) - envs = ["","1"] - key = "MXNET_KVSTORE_USETREE" + envs = [None, '1'] + key = 'MXNET_KVSTORE_USETREE' for val in envs: - with EnvManager(key, val): - if val is "1": + with environment(key, val): + if val is '1': sparse_pull = False else: sparse_pull = True diff --git a/tests/python/gpu/test_operator_gpu.py b/tests/python/gpu/test_operator_gpu.py index d088b44f85b7..84cfe9cfa35d 100644 --- a/tests/python/gpu/test_operator_gpu.py +++ b/tests/python/gpu/test_operator_gpu.py @@ -26,7 +26,7 @@ import itertools from mxnet.test_utils import check_consistency, set_default_context, assert_almost_equal, assert_allclose from mxnet.test_utils import check_symbolic_forward, check_symbolic_backward, discard_stderr -from mxnet.test_utils import default_context, rand_shape_2d, rand_ndarray, same +from mxnet.test_utils import default_context, rand_shape_2d, rand_ndarray, same, environment from mxnet.base import MXNetError from mxnet import autograd @@ -654,12 +654,12 @@ def _conv_with_num_streams(seed): @pytest.mark.skip(reason="skipping for now due to severe flakiness") @with_seed() def test_convolution_multiple_streams(): - for num_streams in [1, 2]: + for num_streams in ['1', '2']: for engine in ['NaiveEngine', 'ThreadedEngine', 'ThreadedEnginePerDevice']: - print("Starting engine %s with %d streams." % (engine, num_streams), file=sys.stderr) + print('Starting engine {} with {} streams.'.format(engine, num_streams), file=sys.stderr) run_in_spawned_process(_conv_with_num_streams, {'MXNET_GPU_WORKER_NSTREAMS' : num_streams, 'MXNET_ENGINE_TYPE' : engine}) - print("Finished engine %s with %d streams." % (engine, num_streams), file=sys.stderr) + print('Finished engine {} with {} streams.'.format(engine, num_streams), file=sys.stderr) # This test is designed to expose an issue with cudnn v7.1.4 algo find() when invoked with large c. @@ -2009,22 +2009,22 @@ def check_proposal_consistency(op, batch_size, with_nms=False): # The following 2 functions launch 0-thread kernels, an error that should be caught and signaled. def kernel_error_check_imperative(): - os.environ['MXNET_ENGINE_TYPE'] = 'NaiveEngine' - with mx.np_shape(active=True): - a = mx.nd.array([1,2,3],ctx=mx.gpu(0)) - b = mx.nd.array([],ctx=mx.gpu(0)) - c = (a / b).asnumpy() + with environment('MXNET_ENGINE_TYPE', 'NaiveEngine'): + with mx.np_shape(active=True): + a = mx.nd.array([1,2,3],ctx=mx.gpu(0)) + b = mx.nd.array([],ctx=mx.gpu(0)) + c = (a / b).asnumpy() def kernel_error_check_symbolic(): - os.environ['MXNET_ENGINE_TYPE'] = 'NaiveEngine' - with mx.np_shape(active=True): - a = mx.sym.Variable('a') - b = mx.sym.Variable('b') - c = a / b - f = c._bind(mx.gpu(0), { 'a':mx.nd.array([1,2,3],ctx=mx.gpu(0)), - 'b':mx.nd.array([],ctx=mx.gpu(0))}) - f.forward() - g = f.outputs[0].asnumpy() + with environment('MXNET_ENGINE_TYPE', 'NaiveEngine'): + with mx.np_shape(active=True): + a = mx.sym.Variable('a') + b = mx.sym.Variable('b') + c = a / b + f = c.bind(mx.gpu(0), {'a':mx.nd.array([1,2,3],ctx=mx.gpu(0)), + 'b':mx.nd.array([],ctx=mx.gpu(0))}) + f.forward() + g = f.outputs[0].asnumpy() @pytest.mark.serial def test_kernel_error_checking(): @@ -2223,9 +2223,9 @@ def test_bulking(): # Create shared variable to return measured time from test process time_per_iteration = mp.Manager().Value('d', 0.0) if not run_in_spawned_process(_test_bulking_in_process, - {'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_FWD' : seg_sizes[0], - 'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_BWD' : seg_sizes[1], - 'MXNET_EXEC_BULK_EXEC_TRAIN' : seg_sizes[2]}, + {'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_FWD' : str(seg_sizes[0]), + 'MXNET_EXEC_BULK_EXEC_MAX_NODE_TRAIN_BWD' : str(seg_sizes[1]), + 'MXNET_EXEC_BULK_EXEC_TRAIN' : str(seg_sizes[2])}, time_per_iteration): # skip test since the python version can't run it properly. Warning msg was logged. return diff --git a/tests/python/unittest/common.py b/tests/python/unittest/common.py index 331f32d789b7..2f30096c10b4 100644 --- a/tests/python/unittest/common.py +++ b/tests/python/unittest/common.py @@ -23,6 +23,7 @@ import random import shutil from mxnet.base import MXNetError +from mxnet.test_utils import environment curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) sys.path.append(os.path.join(curr_path, '../common/')) sys.path.insert(0, os.path.join(curr_path, '../../../python')) @@ -216,15 +217,17 @@ def test_new(*args, **kwargs): logger = default_logger() # 'pytest --logging-level=DEBUG' shows this msg even with an ensuing core dump. test_count_msg = '{} of {}: '.format(i+1,test_count) if test_count > 1 else '' - test_msg = ('{}Setting test np/mx/python random seeds, use MXNET_TEST_SEED={}' - ' to reproduce.').format(test_count_msg, this_test_seed) - logger.log(log_level, test_msg) + pre_test_msg = ('{}Setting test np/mx/python random seeds, use MXNET_TEST_SEED={}' + ' to reproduce.').format(test_count_msg, this_test_seed) + on_err_test_msg = ('{}Error seen with seeded test, use MXNET_TEST_SEED={}' + ' to reproduce.').format(test_count_msg, this_test_seed) + logger.log(log_level, pre_test_msg) try: orig_test(*args, **kwargs) except: # With exceptions, repeat test_msg at WARNING level to be sure it's seen. if log_level < logging.WARNING: - logger.warning(test_msg) + logger.warning(on_err_test_msg) raise finally: # Provide test-isolation for any test having this decorator @@ -307,6 +310,22 @@ def teardown_module(): mx.nd.waitall() +def with_environment(*args_): + """ + Helper function that takes a dictionary of environment variables and their + desired settings and changes the environment in advance of running the + decorated code. The original environment state is reinstated afterwards, + even if exceptions are raised. + """ + def test_helper(orig_test): + @functools.wraps(orig_test) + def test_new(*args, **kwargs): + with environment(*args_): + orig_test(*args, **kwargs) + return test_new + return test_helper + + def run_in_spawned_process(func, env, *args): """ Helper function to run a test in its own process. @@ -337,18 +356,12 @@ def run_in_spawned_process(func, env, *args): return False else: seed = np.random.randint(0,1024*1024*1024) - orig_environ = os.environ.copy() - try: - for (key, value) in env.items(): - os.environ[key] = str(value) + with environment(env): # Prepend seed as first arg p = mpctx.Process(target=func, args=(seed,)+args) p.start() p.join() assert p.exitcode == 0, "Non-zero exit code %d from %s()." % (p.exitcode, func.__name__) - finally: - os.environ.clear() - os.environ.update(orig_environ) return True diff --git a/tests/python/unittest/test_autograd.py b/tests/python/unittest/test_autograd.py index ad0601cdbb0f..f9a7eccfa0a5 100644 --- a/tests/python/unittest/test_autograd.py +++ b/tests/python/unittest/test_autograd.py @@ -20,8 +20,9 @@ from mxnet.ndarray import zeros_like from mxnet.autograd import * from mxnet.test_utils import * + from common import setup_module, with_seed, teardown_module, xfail_when_nonstandard_decimal_separator -from mxnet.test_utils import EnvManager +from mxnet.test_utils import environment import pytest @@ -124,7 +125,7 @@ def check_unary_func(x): autograd_assert(x, func=f_square, grad_func=f_square_grad) uniform = nd.uniform(shape=(4, 5)) stypes = ['default', 'row_sparse', 'csr'] - with EnvManager('MXNET_STORAGE_FALLBACK_LOG_VERBOSE', '0'): + with environment('MXNET_STORAGE_FALLBACK_LOG_VERBOSE', '0'): for stype in stypes: check_unary_func(uniform.tostype(stype)) @@ -143,7 +144,7 @@ def check_binary_func(x, y): uniform_x = nd.uniform(shape=(4, 5)) uniform_y = nd.uniform(shape=(4, 5)) stypes = ['default', 'row_sparse', 'csr'] - with EnvManager('MXNET_STORAGE_FALLBACK_LOG_VERBOSE', '0'): + with environment('MXNET_STORAGE_FALLBACK_LOG_VERBOSE', '0'): for stype_x in stypes: for stype_y in stypes: x = uniform_x.tostype(stype_x) @@ -404,6 +405,67 @@ def backward(self, dY): X.wait_to_read() +@with_seed() +@pytest.mark.garbage_expected +@use_np +def test_np_function(): + class func(Function): + def forward(self, x, y): + m = x / y + n = x * y + self.save_for_backward(x, y) + return m, n + + def backward(self, dm, dn): + x, y = self.saved_tensors + dx = dm/y + dn*y + dy = dn*x - dm * x / y / y + return dx, dy + + f = func() + x = mx.np.random.uniform(size=(10,)) + x.attach_grad() + y = mx.np.random.uniform(size=(10,)) + y.attach_grad() + with record(): + m, n = f(x, y) + backward([m, n]) + + dx1 = x.grad.asnumpy() + dy1 = y.grad.asnumpy() + + with record(): + backward([x/y, x*y]) + + # Non-zero atol required, as exposed by seed 630179191 + atol = 1e-6 + assert_almost_equal(x.grad.asnumpy(), dx1, atol=atol) + assert_almost_equal(y.grad.asnumpy(), dy1, atol=atol) + + +@with_seed() +@pytest.mark.garbage_expected +@use_np +def test_np_function1(): + class Foo(mx.autograd.Function): + def __init__(self): + super(Foo, self).__init__() + + def forward(self, X): + return X + 1; + + def backward(self, dY): + return dY + + with mx.autograd.record(): + X = mx.np.zeros((3, 4)) + #X.attach_grad() # uncommenting this line works + for i in range(5): + f = Foo() + X = f(X) + X.wait_to_read() + + @with_seed() @pytest.mark.garbage_expected def test_get_symbol(): diff --git a/tests/python/unittest/test_base.py b/tests/python/unittest/test_base.py index 07d429589ba2..2175d7b9a062 100644 --- a/tests/python/unittest/test_base.py +++ b/tests/python/unittest/test_base.py @@ -16,33 +16,94 @@ # under the License. import mxnet as mx +from numpy.testing import assert_equal from mxnet.base import data_dir +from mxnet.test_utils import environment +from mxnet.util import getenv +from common import setup_module, teardown_module, with_environment import os -import unittest import logging import os.path as op import platform +import pytest -class MXNetDataDirTest(unittest.TestCase): - def setUp(self): - self.mxnet_data_dir = os.environ.get('MXNET_HOME') - if 'MXNET_HOME' in os.environ: - del os.environ['MXNET_HOME'] +@pytest.mark.garbage_expected +def test_environment(): + name1 = 'MXNET_TEST_ENV_VAR_1' + name2 = 'MXNET_TEST_ENV_VAR_2' - def tearDown(self): - if self.mxnet_data_dir: - os.environ['MXNET_HOME'] = self.mxnet_data_dir - else: - if 'MXNET_HOME' in os.environ: - del os.environ['MXNET_HOME'] - - def test_data_dir(self,): - prev_data_dir = data_dir() - system = platform.system() - if system != 'Windows': - self.assertEqual(data_dir(), op.join(op.expanduser('~'), '.mxnet')) - os.environ['MXNET_HOME'] = '/tmp/mxnet_data' - self.assertEqual(data_dir(), '/tmp/mxnet_data') - del os.environ['MXNET_HOME'] - self.assertEqual(data_dir(), prev_data_dir) + # Test that a variable can be set in the python and backend environment + with environment(name1, '42'): + assert_equal(os.environ.get(name1), '42') + assert_equal(getenv(name1), '42') + + # Test dict form of invocation + env_var_dict = {name1: '1', name2: '2'} + with environment(env_var_dict): + for key, value in env_var_dict.items(): + assert_equal(os.environ.get(key), value) + assert_equal(getenv(key), value) + + # Further testing in 'test_with_environment()' + +@with_environment({'MXNET_TEST_ENV_VAR_1': '10', 'MXNET_TEST_ENV_VAR_2': None}) +def test_with_environment(): + name1 = 'MXNET_TEST_ENV_VAR_1' + name2 = 'MXNET_TEST_ENV_VAR_2' + def check_background_values(): + assert_equal(os.environ.get(name1), '10') + assert_equal(getenv(name1), '10') + assert_equal(os.environ.get(name2), None) + assert_equal(getenv(name2), None) + + check_background_values() + + # This completes the testing of with_environment(), but since we have + # an environment with a couple of known settings, lets use it to test if + # 'with environment()' properly restores to these settings in all cases. + class OnPurposeError(Exception): + """A class for exceptions thrown by this test""" + pass + + # Enter an environment with one variable set and check it appears + # to both python and the backend. Then, outside the 'with' block, + # make sure the background environment is seen, regardless of whether + # the 'with' block raised an exception. + def test_one_var(name, value, raise_exception=False): + try: + with environment(name, value): + assert_equal(os.environ.get(name), value) + assert_equal(getenv(name), value) + if raise_exception: + raise OnPurposeError + except OnPurposeError: + pass + finally: + check_background_values() + + # Test various combinations of set and unset env vars. + # Test that the background setting is restored in the presense of exceptions. + for raise_exception in [False, True]: + # name1 is initially set in the environment + test_one_var(name1, '42', raise_exception) + test_one_var(name1, None, raise_exception) + # name2 is initially not set in the environment + test_one_var(name2, '42', raise_exception) + test_one_var(name2, None, raise_exception) + + +def test_data_dir(): + prev_data_dir = data_dir() + system = platform.system() + # Test that data_dir() returns the proper default value when MXNET_HOME is not set + with environment('MXNET_HOME', None): + if system == 'Windows': + assert_equal(data_dir(), op.join(os.environ.get('APPDATA'), 'mxnet')) + else: + assert_equal(data_dir(), op.join(op.expanduser('~'), '.mxnet')) + # Test that data_dir() responds to an explicit setting of MXNET_HOME + with environment('MXNET_HOME', '/tmp/mxnet_data'): + assert_equal(data_dir(), '/tmp/mxnet_data') + # Test that this test has not disturbed the MXNET_HOME value existing before the test + assert_equal(data_dir(), prev_data_dir) diff --git a/tests/python/unittest/test_engine.py b/tests/python/unittest/test_engine.py index 538e4b57ead8..642d9e1f169e 100644 --- a/tests/python/unittest/test_engine.py +++ b/tests/python/unittest/test_engine.py @@ -17,7 +17,7 @@ import mxnet as mx import os -from mxnet.test_utils import EnvManager +from mxnet.test_utils import environment import pytest def test_bulk(): @@ -41,7 +41,7 @@ def test_engine_openmp_after_fork(): With GOMP the child always has the same number when calling omp_get_max_threads, with LLVM OMP the child respects the number of max threads set in the parent. """ - with EnvManager('OMP_NUM_THREADS', '42'): + with environment('OMP_NUM_THREADS', '42'): r, w = os.pipe() pid = os.fork() if pid: diff --git a/tests/python/unittest/test_engine_import.py b/tests/python/unittest/test_engine_import.py index 7675cf836999..322528c11aed 100644 --- a/tests/python/unittest/test_engine_import.py +++ b/tests/python/unittest/test_engine_import.py @@ -16,6 +16,8 @@ # under the License. import os +from mxnet.test_utils import environment +import pytest try: reload # Python 2 @@ -23,15 +25,13 @@ from importlib import reload +@pytest.mark.skip(reason='test needs improving, current use of reload(mxnet) is ineffective') def test_engine_import(): import mxnet - - engine_types = ['', 'NaiveEngine', 'ThreadedEngine', 'ThreadedEnginePerDevice'] + # Temporarily add an illegal entry (that is not caught) to show how the test needs improving + engine_types = [None, 'NaiveEngine', 'ThreadedEngine', 'ThreadedEnginePerDevice', 'BogusEngine'] for type in engine_types: - if type: - os.environ['MXNET_ENGINE_TYPE'] = type - else: - os.environ.pop('MXNET_ENGINE_TYPE', None) - reload(mxnet) + with environment('MXNET_ENGINE_TYPE', type): + reload(mxnet) diff --git a/tests/python/unittest/test_executor.py b/tests/python/unittest/test_executor.py index 0e142bf5b05a..27a9e030c171 100644 --- a/tests/python/unittest/test_executor.py +++ b/tests/python/unittest/test_executor.py @@ -18,7 +18,7 @@ import numpy as np import mxnet as mx from common import setup_module, with_seed, teardown_module -from mxnet.test_utils import assert_almost_equal +from mxnet.test_utils import assert_almost_equal, environment def check_bind_with_uniform(uf, gf, dim, sf=None, lshape=None, rshape=None): @@ -74,42 +74,34 @@ def check_bind_with_uniform(uf, gf, dim, sf=None, lshape=None, rshape=None): @with_seed() def test_bind(): - def check_bind(disable_bulk_exec): - if disable_bulk_exec: - prev_bulk_inf_val = mx.test_utils.set_env_var("MXNET_EXEC_BULK_EXEC_INFERENCE", "0", "1") - prev_bulk_train_val = mx.test_utils.set_env_var("MXNET_EXEC_BULK_EXEC_TRAIN", "0", "1") - - nrepeat = 10 - maxdim = 4 - for repeat in range(nrepeat): - for dim in range(1, maxdim): - check_bind_with_uniform(lambda x, y: x + y, - lambda g, x, y: (g, g), - dim) - check_bind_with_uniform(lambda x, y: x - y, - lambda g, x, y: (g, -g), - dim) - check_bind_with_uniform(lambda x, y: x * y, - lambda g, x, y: (y * g, x * g), - dim) - check_bind_with_uniform(lambda x, y: x / y, - lambda g, x, y: (g / y, -x * g/ (y**2)), - dim) - - check_bind_with_uniform(lambda x, y: np.maximum(x, y), - lambda g, x, y: (g * (x>=y), g * (y>x)), - dim, - sf=mx.symbol.maximum) - check_bind_with_uniform(lambda x, y: np.minimum(x, y), - lambda g, x, y: (g * (x<=y), g * (y=y), g * (y>x)), + dim, + sf=mx.symbol.maximum) + check_bind_with_uniform(lambda x, y: np.minimum(x, y), + lambda g, x, y: (g * (x<=y), g * (y 1))) + np_target + 0.5 * np.log(2 * np_target * np.pi))*(np_target > 1)), axis=1) Loss_compute_full = gluon.loss.PoissonNLLLoss(from_logits=False, compute_full=True) loss_compute_full = Loss_compute_full(mx.nd.array(np_pred), mx.nd.array(np_target)) - assert_almost_equal(np_compute_full, loss_compute_full.asscalar()) + assert_almost_equal(np_compute_full, loss_compute_full) diff --git a/tests/python/unittest/test_memory_opt.py b/tests/python/unittest/test_memory_opt.py index d2f85e567553..97d05ebfa8f9 100644 --- a/tests/python/unittest/test_memory_opt.py +++ b/tests/python/unittest/test_memory_opt.py @@ -19,40 +19,12 @@ import mxnet as mx import os import sys - +from common import setup_module, teardown_module, with_environment +from mxnet.test_utils import environment num_hidden = 4096 - -def memory_opt_env_check(test_func): - # This decorator checks for th - def test_memory_opt_wrapper(): - # Whether the underlying OS is Windows or not. Windows does not support - # setting environment variblae on the fly. In other words, statement - # - # os.environ["MXNET_MEMORY_OPT"] = '1' - # - # will have NO effect because the C++ backend still sees - # `os.environ["MXNET_MEMORY_OPT"]` as NULL pointer. - # - # \sa test_operator.py:test_norm - is_windows = sys.platform.startswith('win') - do_memory_opt = True - if is_windows: - if "MXNET_MEMORY_OPT" not in os.environ: - do_memory_opt = False - else: - do_memory_opt = os.environ["MXNET_MEMORY_OPT"] == '1' - else: - os.environ["MXNET_MEMORY_OPT"] = '1' - - if do_memory_opt: - test_func() - os.environ["MXNET_MEMORY_OPT"] = '0' - return test_memory_opt_wrapper - - -@memory_opt_env_check +@with_environment('MXNET_MEMORY_OPT', '1') def test_rnn_cell(): # x →→→ + →→→ tanh ⇒⇒⇒ # ↑ @@ -70,7 +42,7 @@ def test_rnn_cell(): exec = z._simple_bind(mx.cpu(), 'write', x=(num_hidden,), y=(num_hidden,)) -@memory_opt_env_check +@with_environment('MXNET_MEMORY_OPT', '1') def test_mlp_attn(): # x →→→ + →→→ tanh ⇒⇒⇒ # ↑ + →→→ tanh ⇒⇒⇒ @@ -93,7 +65,7 @@ def test_mlp_attn(): exec = z._simple_bind(mx.cpu(), 'write', **in_arg_shapes) -@memory_opt_env_check +@with_environment('MXNET_MEMORY_OPT', '1') def test_fc(): # x →→→ tanh ⇒⇒⇒ tanh ⇒⇒⇒ FC # →→→ tanh_ →→→ diff --git a/tests/python/unittest/test_metric.py b/tests/python/unittest/test_metric.py index 88b9d9cedce2..d66f4e97d708 100644 --- a/tests/python/unittest/test_metric.py +++ b/tests/python/unittest/test_metric.py @@ -39,19 +39,25 @@ def test_metrics(): check_metric('perplexity', axis=-1) check_metric('pearsonr') check_metric('pcc') - check_metric('nll_loss') + check_metric('ce') check_metric('loss') composite = mx.gluon.metric.create(['acc', 'f1']) check_metric(composite) -def test_nll_loss(): - metric = mx.gluon.metric.create('nll_loss') +def test_ce(): + metric = mx.gluon.metric.create('ce') pred = mx.nd.array([[0.2, 0.3, 0.5], [0.6, 0.1, 0.3]]) label = mx.nd.array([2, 1]) metric.update([label], [pred]) _, loss = metric.get() expected_loss = -(np.log(pred[0][2].asscalar()) + np.log(pred[1][1].asscalar())) / 2 assert loss == expected_loss + metric = mx.gluon.metric.create('ce', from_logits=True) + pred = mx.nd.log(pred) + metric.update([label], [pred]) + _, loss = metric.get() + np.testing.assert_almost_equal(loss, expected_loss) + def test_acc(): pred = mx.nd.array([[0.3, 0.7], [0, 1.], [0.4, 0.6]]) @@ -159,7 +165,7 @@ def test_multiclass_f1(): macroF1.update([label11, label12], [pred11, pred12]) assert microF1.num_inst == 6 assert macroF1.num_inst == 6 - + # from sklearn.metrics import f1_score # overall_pred = [0, 1, 2, 0, 1, 2] # overall_label = [0, 2, 1, 0, 0, 1] @@ -167,7 +173,7 @@ def test_multiclass_f1(): fmicro = 0.3333333333333333 #f1_score(overall_label, overall_pred, average="micro") np.testing.assert_almost_equal(microF1.get()[1], fmicro) np.testing.assert_almost_equal(macroF1.get()[1], fmacro) - + @xfail_when_nonstandard_decimal_separator def test_multilabel_f1(): microF1 = mx.gluon.metric.create("f1", class_type="multilabel", average="micro") @@ -183,7 +189,7 @@ def test_multilabel_f1(): macroF1.update([label], [pred]) microF1.update([label], [pred]) assert macroF1.get()[1] == 0.5 # one class is 1.0, the other is 0. (divided by 0) - np.testing.assert_almost_equal(microF1.get()[1], 2.0 / 3) + np.testing.assert_almost_equal(microF1.get()[1], 2.0 / 3) macroF1.reset() microF1.reset() @@ -209,7 +215,7 @@ def test_mcc(): microMCC = mx.gluon.metric.create("mcc") assert np.isnan(microMCC.get()[1]) - + # check divide by zero pred = mx.nd.array([[0.9, 0.1], [0.8, 0.2]]) diff --git a/tests/python/unittest/test_numpy_loss.py b/tests/python/unittest/test_numpy_loss.py new file mode 100644 index 000000000000..6c63546f85b1 --- /dev/null +++ b/tests/python/unittest/test_numpy_loss.py @@ -0,0 +1,235 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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 mxnet as mx +import numpy as np +from mxnet import gluon, autograd +from mxnet.test_utils import assert_almost_equal, default_context, use_np +from common import setup_module, with_seed, teardown_module, xfail_when_nonstandard_decimal_separator +import unittest + + +@xfail_when_nonstandard_decimal_separator +@with_seed() +@use_np +def test_loss_np_ndarray(): + output = mx.np.array([1, 2, 3, 4]) + label = mx.np.array([1, 3, 5, 7]) + weighting = mx.np.array([0.5, 1, 0.5, 1]) + + loss = gluon.loss.L1Loss() + assert mx.np.sum(loss(output, label)) == 6. + loss = gluon.loss.L1Loss(weight=0.5) + assert mx.np.sum(loss(output, label)) == 3. + loss = gluon.loss.L1Loss() + assert mx.np.sum(loss(output, label, weighting)) == 5. + + loss = gluon.loss.L2Loss() + assert mx.np.sum(loss(output, label)) == 7. + loss = gluon.loss.L2Loss(weight=0.25) + assert mx.np.sum(loss(output, label)) == 1.75 + loss = gluon.loss.L2Loss() + assert mx.np.sum(loss(output, label, weighting)) == 6 + + loss = gluon.loss.HuberLoss() + assert mx.np.sum(loss(output, label)) == 4.5 + loss = gluon.loss.HuberLoss(weight=0.25) + assert mx.np.sum(loss(output, label)) == 1.125 + loss = gluon.loss.HuberLoss() + assert mx.np.sum(loss(output, label, weighting)) == 3.75 + + loss = gluon.loss.HingeLoss(margin=10) + assert mx.np.sum(loss(output, label)) == 13. + loss = gluon.loss.HingeLoss(margin=8, weight=0.25) + assert mx.np.sum(loss(output, label)) == 2.25 + loss = gluon.loss.HingeLoss(margin=7) + assert mx.np.sum(loss(output, label, weighting)) == 4. + + loss = gluon.loss.SquaredHingeLoss(margin=10) + assert mx.np.sum(loss(output, label)) == 97. + loss = gluon.loss.SquaredHingeLoss(margin=8, weight=0.25) + assert mx.np.sum(loss(output, label)) == 13.25 + loss = gluon.loss.SquaredHingeLoss(margin=7) + assert mx.np.sum(loss(output, label, weighting)) == 19. + + loss = gluon.loss.TripletLoss(margin=10) + assert mx.np.sum(loss(output, label, -label)) == 6. + loss = gluon.loss.TripletLoss(margin=8, weight=0.25) + assert mx.np.sum(loss(output, label, -label)) == 1. + loss = gluon.loss.TripletLoss(margin=7) + assert mx.np.sum(loss(output, label, -label, weighting)) == 1.5 + + output = mx.np.array([[0, 2], [1, 4]]) + label = mx.np.array([0, 1]) + weighting = mx.np.array([[0.5], [1.0]]) + + loss = gluon.loss.SoftmaxCrossEntropyLoss() + L = loss(output, label).asnumpy() + assert_almost_equal(L, np.array([ 2.12692809, 0.04858733]), rtol=1e-3, atol=1e-4) + + L = loss(output, label, weighting).asnumpy() + assert_almost_equal(L, np.array([ 1.06346405, 0.04858733]), rtol=1e-3, atol=1e-4) + + +@with_seed() +@use_np +def test_bce_equal_ce2(): + N = 100 + loss1 = gluon.loss.SigmoidBCELoss(from_sigmoid=True) + loss2 = gluon.loss.SoftmaxCELoss(from_logits=True) + out1 = mx.np.random.uniform(0.1, 0.9, size=(N, 1)) + out2 = mx.np.log(mx.np.concatenate((1-out1, out1), axis=1) + 1e-8) + label = mx.np.round(mx.np.random.uniform(0, 1, size=(N, 1))) + assert_almost_equal(loss1(out1, label).asnumpy(), loss2(out2, label).asnumpy()) + +@use_np +def test_logistic_loss_equal_bce(): + N = 100 + loss_binary = gluon.loss.LogisticLoss(label_format='binary') + loss_signed = gluon.loss.LogisticLoss(label_format='signed') + loss_bce = gluon.loss.SigmoidBCELoss(from_sigmoid=False) + data = mx.np.random.uniform(-10, 10, size=(N, 1)) + label = mx.np.round(mx.np.random.uniform(0, 1, size=(N, 1))) + assert_almost_equal(loss_binary(data, label), loss_bce(data, label), atol=1e-6) + assert_almost_equal(loss_signed(data, 2 * label - 1), loss_bce(data, label), atol=1e-6) + + +@with_seed() +@use_np +def test_ctc_loss(): + loss = gluon.loss.CTCLoss() + l = loss(mx.np.ones((2,20,4)), mx.np.array([[1,0,-1,-1],[2,1,1,-1]])) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + loss = gluon.loss.CTCLoss(layout='TNC') + l = loss(mx.np.ones((20,2,4)), mx.np.array([[1,0,-1,-1],[2,1,1,-1]])) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + loss = gluon.loss.CTCLoss(layout='TNC', label_layout='TN') + l = loss(mx.np.ones((20,2,4)), mx.np.array([[1,0,-1,-1],[2,1,1,-1]]).T) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + loss = gluon.loss.CTCLoss() + l = loss(mx.np.ones((2,20,4)), mx.np.array([[2,1,2,2],[3,2,2,2]]), None, mx.np.array([2,3])) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + loss = gluon.loss.CTCLoss() + l = loss(mx.np.ones((2,25,4)), mx.np.array([[2,1,-1,-1],[3,2,2,-1]]), mx.np.array([20,20])) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + loss = gluon.loss.CTCLoss() + l = loss(mx.np.ones((2,25,4)), mx.np.array([[2,1,3,3],[3,2,2,3]]), mx.np.array([20,20]), mx.np.array([2,3])) + assert_almost_equal(l, np.array([18.82820702, 16.50581741])) + + +@xfail_when_nonstandard_decimal_separator +@with_seed() +@use_np +def test_sdml_loss(): + + N = 5 # number of samples + DIM = 10 # Dimensionality + EPOCHS = 20 + + # Generate randomized data and 'positive' samples + data = mx.np.random.uniform(-1, 1, size=(N, DIM)) + pos = data + mx.np.random.uniform(-0.1, 0.1, size=(N, DIM)) # correlated paired data + data_iter = mx.io.NDArrayIter({'data' : data, 'pos' : pos}, batch_size=N) + + # Init model and trainer + sdml_loss = gluon.loss.SDMLLoss() + model = gluon.nn.Dense(DIM, activation='tanh') # Simple NN encoder + model.initialize(mx.init.Xavier(), ctx=mx.current_context()) + trainer = gluon.Trainer(model.collect_params(), 'adam', {'learning_rate' : 0.1}) + + for i in range(EPOCHS): # Training loop + data_iter.reset() + for iter_batch in data_iter: + batch = [datum.as_in_ctx(mx.current_context()).as_np_ndarray() for datum in iter_batch.data] + with autograd.record(): + data, pos = batch + z_data, z_pos = model(data), model(pos) + loss = sdml_loss(z_data, z_pos) + loss.backward() + trainer.step(1) + + # After training euclidean distance between aligned pairs should be lower than all non-aligned pairs + avg_loss = loss.sum()/len(loss) + assert(avg_loss < 0.05) + +@with_seed() +@use_np +def test_cosine_loss(): + #Generating samples + input1 = mx.np.random.randn(3, 2) + input2 = mx.np.random.randn(3, 2) + label = mx.np.sign(mx.np.random.randn(input1.shape[0])) + #Calculating loss from cosine embedding loss function in Gluon + Loss = gluon.loss.CosineEmbeddingLoss() + loss = Loss(input1, input2, label) + + # Calculating the loss Numpy way + numerator = mx.np.sum(input1 * input2, keepdims=True, axis=1) + denominator = mx.np.sqrt(mx.np.sum(input1**2, axis=1, keepdims=True)) \ + * mx.np.sqrt(mx.np.sum(input2**2, axis=1, keepdims=True)) + x = numerator/denominator + label = mx.npx.reshape(label, (-1, 1)) + numpy_loss = mx.npx.reshape( + mx.np.where(label == 1, 1-x, mx.npx.relu(x)), (-1,)) + assert_almost_equal(loss.asnumpy(), numpy_loss.asnumpy(), rtol=1e-3, atol=1e-5) + +@xfail_when_nonstandard_decimal_separator +@use_np +def test_poisson_nllloss(): + shape=(3, 4) + not_axis0 = tuple(range(1, len(shape))) + pred = mx.np.random.normal(size=shape) + min_pred = mx.np.min(pred) + #This is necessary to ensure only positive random values are generated for prediction, + # to avoid ivalid log calculation + pred[:] = pred + mx.np.abs(min_pred) + target = mx.np.random.normal(size=shape) + min_target = mx.np.min(target) + #This is necessary to ensure only positive random values are generated for prediction, + # to avoid ivalid log calculation + target[:] += mx.np.abs(min_target) + + Loss = gluon.loss.PoissonNLLLoss(from_logits=True) + Loss_no_logits = gluon.loss.PoissonNLLLoss(from_logits=False) + #Calculating by brute formula for default value of from_logits = True + + # 1) Testing for flag logits = True + brute_loss = mx.np.mean(mx.np.exp(pred) - target * pred, axis=1) + loss_withlogits = Loss(pred, target) + assert_almost_equal(brute_loss, loss_withlogits) + + #2) Testing for flag logits = False + loss_no_logits = Loss_no_logits(pred, target) + np_loss_no_logits = mx.np.mean(pred - target * mx.np.log(pred + 1e-08), + axis=1) + assert_almost_equal(np_loss_no_logits, loss_no_logits) + + #3) Testing for Sterling approximation + shape=(2, 3) + np_pred = mx.np.random.uniform(1, 5, shape) + np_target = mx.np.random.uniform(1, 5, shape) + np_compute_full = mx.np.mean((np_pred - np_target * mx.np.log(np_pred + 1e-08)) + ((np_target * np.log(np_target)-\ + np_target + 0.5 * np.log(2 * np_target * np.pi))*(np_target > 1)), axis=1) + Loss_compute_full = gluon.loss.PoissonNLLLoss(from_logits=False, compute_full=True) + loss_compute_full = Loss_compute_full(np_pred, np_target) + assert_almost_equal(np_compute_full, loss_compute_full) + diff --git a/tests/python/unittest/test_numpy_ndarray.py b/tests/python/unittest/test_numpy_ndarray.py index 966b26d7e2d2..74f6af33d4ad 100644 --- a/tests/python/unittest/test_numpy_ndarray.py +++ b/tests/python/unittest/test_numpy_ndarray.py @@ -1369,3 +1369,55 @@ def test_dlpack(dtype, size): same(a_np+1, b) same(a_np+2, c) same(a_np+2, a_copy) + +@use_np +@pytest.mark.parametrize('np_array', [ + # ordinary numpy array + _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32"), + # 0-dim + _np.array((1, )).reshape(()), + # 0-size + _np.array(()).reshape((1, 0, 2)), +]) +@pytest.mark.parametrize('zero_copy', [False, True]) +def test_from_numpy(np_array, zero_copy): + # Test zero_copy + mx_array = mx.npx.from_numpy(np_array, zero_copy=zero_copy) + mx.test_utils.assert_almost_equal(np_array, mx_array.asnumpy()) + +def test_from_numpy_exception(): + np_array = _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32") + mx_array = mx.npx.from_numpy(np_array) + with pytest.raises(ValueError): + np_array[2, 1] = 0 + + mx_array[2, 1] = 100 + mx.test_utils.assert_almost_equal(np_array, mx_array.asnumpy()) + np_array = _np.array([[1, 2], [3, 4], [5, 6]]).transpose() + assert not np_array.flags["C_CONTIGUOUS"] + with pytest.raises(ValueError): + mx_array = mx.nd.from_numpy(np_array) + + np_array = _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32") + mx_array = mx.npx.from_numpy(np_array, zero_copy=False) + np_array[2, 1] = 0 # no error + +def test_mixed_array_types(): + np_array = _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32") + mx_array = mx.np.ones((3, 1)) + assert_almost_equal(mx_array + np_array, 1+np_array) + +def test_mixed_array_types_share_memory(): + np_array = _np.array([[1, 2], [3, 4], [5, 6]], dtype="float32") + mx_array = mx.npx.from_numpy(np_array) + assert _np.may_share_memory(np_array, mx_array) + assert _np.shares_memory(np_array, mx_array) + + np_array_slice = np_array[:2] + mx_array_slice = mx_array[1:] + assert _np.may_share_memory(np_array_slice, mx_array) + assert _np.shares_memory(np_array_slice, mx_array) + + mx_pinned_array = mx_array.as_in_ctx(mx.cpu_pinned(0)) + assert not _np.may_share_memory(np_array, mx_pinned_array) + assert not _np.shares_memory(np_array, mx_pinned_array) diff --git a/tests/python/unittest/test_numpy_op.py b/tests/python/unittest/test_numpy_op.py index ed9886ea8f75..e4564e92510e 100644 --- a/tests/python/unittest/test_numpy_op.py +++ b/tests/python/unittest/test_numpy_op.py @@ -852,7 +852,23 @@ def _test_np_exception(func, shape, dim): @with_seed() @use_np -def test_np_average(): +@pytest.mark.parametrize('a_shape,w_shape,axes', [ + ((3, 5), (3, 5), None), + ((4, 5, 6), (4, 5, 6), (0, 2)), + ((3,), (3,), 0), + ((2, 3), (3,), 1), + ((2, 3, 4), (2,), 0), + ((2, 3, 4), (3,), 1), + ((2, 3, 4), (4,), -1), + ((2, 3, 4, 5), (5,), 3) +]) +@pytest.mark.parametrize('dtype', ['float32', 'float64']) +@pytest.mark.parametrize('hybridize', [True, False]) +@pytest.mark.parametrize('is_weighted', [True, False]) +@pytest.mark.parametrize('returned', [True, False]) +@pytest.mark.parametrize('req_a', ['null', 'add', 'write']) +def test_np_average(a_shape, w_shape, axes, is_weighted, req_a, + hybridize, returned, dtype): class TestAverage(HybridBlock): def __init__(self, axis=None, returned=False): super(TestAverage, self).__init__() @@ -894,73 +910,57 @@ def avg_backward(a, w, avg, axes, init_a_grad=None, init_w_grad=None): w_grad += init_w_grad.asnumpy() return [a_grad, w_grad] - tensor_shapes = [ - ((3, 5), (3, 5), None), # (a_shape, w_shape, axes) - ((4, 5, 6), (4, 5, 6), (0, 2)), - ((3,), (3,), 0), - ((2, 3), (3,), 1), - ((2, 3, 4), (2,), 0), - ((2, 3, 4), (3,), 1), - ((2, 3, 4), (4,), -1), - ((2, 3, 4, 5), (5,), 3) - ] - - flags = [True, False] - dtypes = ['float32', 'float64'] - reqs = ['null', 'add', 'write'] - for hybridize, returned, (a_shape, w_shape, axes), dtype, is_weighted, req_a in \ - itertools.product(flags, flags, tensor_shapes, dtypes, flags, reqs): - if req_a == 'null' and not is_weighted: - continue - rtol, atol = 1e-3, 1e-4 - test_average = TestAverage(axes, returned) - if hybridize: - test_average.hybridize() - a = np.random.uniform(-1.0, 1.0, size=a_shape, dtype=dtype) - a.attach_grad(req_a) - init_a_grad = np.random.uniform(-1.0, 1.0, size=a_shape, dtype=dtype) if req_a == 'add' else None - init_w_grad = None - req_w = req_a - w, np_w = None, None - if is_weighted: - w = np.random.uniform(-1.0, 1.0, size=w_shape, dtype=dtype) - if req_a == 'null': - req_w = random.choice(['add', 'write']) - w.attach_grad(req_w) - if req_w == 'add': - init_w_grad = np.random.uniform(-1.0, 1.0, size=w_shape, dtype=dtype) - np_w = w.asnumpy() - np_out = _np.average(a.asnumpy(), axis=axes, weights=np_w, returned=returned) - with mx.autograd.record(): - mx_out = test_average(a, w) - if returned: - np_out, np_sum_of_weights = np_out - mx_out, mx_sum_of_weights = mx_out - assert_almost_equal(mx_sum_of_weights.asnumpy(), np_sum_of_weights, rtol=rtol, atol=atol) - assert mx_out.shape == np_out.shape - assert_almost_equal(mx_out.asnumpy(), np_out.astype(dtype), rtol=rtol, atol=atol) - if req_a == 'add': - a.grad[:] = init_a_grad - if is_weighted and req_w == 'add': - w.grad[:] = init_w_grad - mx_out.backward() - # Code to get reference backward value - a_grad, w_grad = avg_backward(a.asnumpy(), np_w, np_out, axes, init_a_grad, init_w_grad) - if is_weighted: - assert_almost_equal(w.grad.asnumpy(), w_grad, rtol=rtol*10, atol=atol*10) + if req_a == 'null' and not is_weighted: + return + rtol, atol = 1e-3, 1e-4 + test_average = TestAverage(axes, returned) + if hybridize: + test_average.hybridize() + a = np.random.uniform(-1.0, 1.0, size=a_shape, dtype=dtype) + a.attach_grad(req_a) + init_a_grad = np.random.uniform(-1.0, 1.0, size=a_shape, dtype=dtype) if req_a == 'add' else None + init_w_grad = None + req_w = req_a + w, np_w = None, None + if is_weighted: + w = np.random.uniform(-1.0, 1.0, size=w_shape, dtype=dtype) if req_a == 'null': - assert a.grad is None - else: - assert_almost_equal(a.grad.asnumpy(), a_grad, rtol=rtol, atol=atol) + req_w = random.choice(['add', 'write']) + w.attach_grad(req_w) + if req_w == 'add': + init_w_grad = np.random.uniform(-1.0, 1.0, size=w_shape, dtype=dtype) + np_w = w.asnumpy() + np_out = _np.average(a.asnumpy(), axis=axes, weights=np_w, returned=returned) + with mx.autograd.record(): + mx_out = test_average(a, w) + if returned: + np_out, np_sum_of_weights = np_out + mx_out, mx_sum_of_weights = mx_out + assert_almost_equal(mx_sum_of_weights.asnumpy(), np_sum_of_weights, rtol=rtol, atol=atol) + assert mx_out.shape == np_out.shape + assert_almost_equal(mx_out.asnumpy(), np_out, rtol=rtol, atol=atol) + if req_a == 'add': + a.grad[:] = init_a_grad + if is_weighted and req_w == 'add': + w.grad[:] = init_w_grad + mx_out.backward() + # Code to get reference backward value + a_grad, w_grad = avg_backward(a.asnumpy(), np_w, np_out, axes, init_a_grad, init_w_grad) + if is_weighted: + assert_almost_equal(w.grad.asnumpy(), w_grad, rtol=rtol*10, atol=atol*10) + if req_a == 'null': + assert a.grad is None + else: + assert_almost_equal(a.grad.asnumpy(), a_grad, rtol=rtol, atol=atol) - # Test imperative once again - np_out = _np.average(a.asnumpy(), weights=np_w, axis=axes, returned=returned) - mx_out = np.average(a, weights=w, axis=axes, returned=returned) - if returned: - np_out, np_sum_of_weights = np_out - mx_out, mx_sum_of_weights = mx_out - assert_almost_equal(mx_sum_of_weights.asnumpy(), np_sum_of_weights, rtol=rtol, atol=atol) - assert_almost_equal(mx_out.asnumpy(), np_out.astype(dtype), rtol=rtol, atol=atol) + # Test imperative once again + np_out = _np.average(a.asnumpy(), weights=np_w, axis=axes, returned=returned) + mx_out = np.average(a, weights=w, axis=axes, returned=returned) + if returned: + np_out, np_sum_of_weights = np_out + mx_out, mx_sum_of_weights = mx_out + assert_almost_equal(mx_sum_of_weights.asnumpy(), np_sum_of_weights, rtol=rtol, atol=atol) + assert_almost_equal(mx_out.asnumpy(), np_out, rtol=rtol, atol=atol) @with_seed() @@ -1352,7 +1352,7 @@ def index_add_forward(a, ind, val, ind_ndim, ind_num): else: a[t_ind] += val return a - + def index_add_bwd(out_grad, a_grad, ind, val_grad, ind_ndim, ind_num, grad_req_a, grad_req_val): if grad_req_a == 'add': init_a_grad = _np.array(a_grad) @@ -3071,7 +3071,6 @@ def hybrid_forward(self, F, a, b, *args, **kwargs): @with_seed() @use_np -@pytest.mark.skip(reason='https://github.com/apache/incubator-mxnet/issues/16848') def test_np_mixed_precision_binary_funcs(): itypes = [np.bool, np.int8, np.int32, np.int64] ftypes = [np.float16, np.float32, np.float64] @@ -3084,6 +3083,27 @@ def __init__(self, func): def hybrid_forward(self, F, a, b, *args, **kwargs): return getattr(F.np, self._func)(a, b) + if (func in ['multiply', 'mod', 'equal', 'not_equal', 'greater', + 'greater_equal', 'less', 'less_equal']) and \ + (lshape == () or rshape == ()) : + # the behaviors of infer type in dealing with the input shape of '()' are different between np and onp + # for example, + # mx_test_x1 = np.random.uniform(-2, 2, (2,3)).astype(np.float32) + # mx_test_x2 = np.random.uniform(-2, 2, ()).astype(np.float16) + # np_out = _np.mod(mx_test_x1.asnumpy(), mx_test_x2.asnumpy()) # float16 + # mx_out = np.mod(mx_test_x1, mx_test_x2) # float32 + + # logcial ops: when two numbers are only different in precision, NumPy also has a weird behavior + # for example, + # a = np.array([[1.441]], dtype = np.float16) + # b = np.array(1.4413278, dtype = np.float32) + # c = np.array([1.4413278], dtype = np.float32) + # np.greater(a,b), np.greater(a,c) # True True + # _np.greater(a.asnumpy(),b.asnumpy()), _np.greater(a.asnumpy(),c.asnumpy()) # False True + + # thus, skip the tests + return + np_func = getattr(_np, func) mx_func = TestMixedBinary(func) np_test_x1 = _np.random.uniform(low, high, lshape).astype(ltype) @@ -9523,7 +9543,7 @@ def hybrid_forward(self, F, cond, x, y): same(ret.asnumpy(), _np.where(cond.asnumpy(), x.asnumpy(), 1)) ret_rscalar.backward() same(x.grad.asnumpy(), collapse_sum_like(_np.broadcast_to(cond.asnumpy(), ret.shape), shape_pair[1])) - + # check both scalar case x = _np.random.randint(0, 100) y = _np.random.randint(0, 100) diff --git a/tests/python/unittest/test_operator.py b/tests/python/unittest/test_operator.py index 344cb7279f98..a44ba327b3a1 100644 --- a/tests/python/unittest/test_operator.py +++ b/tests/python/unittest/test_operator.py @@ -30,7 +30,7 @@ from mxnet.operator import * from mxnet.base import py_str, MXNetError, _as_list from common import setup_module, with_seed, teardown_module, assert_raises_cudnn_not_satisfied, assert_raises_cuda_not_satisfied, assertRaises -from common import run_in_spawned_process, xfail_when_nonstandard_decimal_separator +from common import xfail_when_nonstandard_decimal_separator, with_environment import pytest import os @@ -498,11 +498,11 @@ def test_relu(): def frelu(x): return np.maximum(x, 0.0) def frelu_grad(x): - return 1.0 * (x > 0.0) + return np.float32(1.0) * (x > np.float32(0.0)) shape = (3, 4) x = mx.symbol.Variable("x") y = mx.sym.relu(x) - xa = np.random.uniform(low=-1.0,high=1.0,size=shape) + xa = np.random.uniform(low=-1.0,high=1.0,size=shape).astype('float32') eps = 1e-4 # Avoid finite difference method inaccuracies due to discontinuous gradient at the origin. # Here we replace small problematic inputs with 1.0. Repro issue with seed 97264195. @@ -3500,59 +3500,53 @@ def l2norm(input_data, axis=0, keepdims=True): np.int32: np.int32, np.int64: np.int64} dtype_to_str = {np.float16: 'float16', np.float32: 'float32', np.float64: 'float64', np.int32: 'int32', np.int64: 'int64'} - is_windows = sys.platform.startswith('win') - for enforce_safe_acc in ["1", "0"]: - if is_windows: - if enforce_safe_acc == "0": - break - enforce_safe_acc = "0" if "MXNET_SAFE_ACCUMULATION" not in os.environ else os.environ["MXNET_SAFE_ACCUMULATION"] - else: - os.environ["MXNET_SAFE_ACCUMULATION"] = enforce_safe_acc - for order in [1, 2]: - for dtype in [np.float16, np.float32, np.float64]: - for i in range(in_data_dim): - for out_dtype in ['float32', 'float64']: - backward_dtype = np.float32 if out_dtype == 'float32' else np.float64 - accumulation_type = acc_type[dtype] - if enforce_safe_acc == "0": - backward_dtype = dtype - out_dtype = dtype_to_str[dtype] - accumulation_type = dtype - skip_backward = 'int' in out_dtype - in_data = np.random.uniform(-1, 1, in_shape).astype(accumulation_type) - in_data[abs(in_data) < epsilon] = 2 * epsilon - norm_sym = mx.symbol.norm(data=data, ord=order, axis=i, out_dtype=out_dtype, keepdims=True) - npy_out = l1norm(in_data, i) if order is 1 else l2norm(in_data, i) - npy_out_backward = np.sign(in_data) if order is 1 else in_data/npy_out - check_symbolic_forward(norm_sym, [in_data.astype(dtype)], [npy_out.astype(out_dtype)], - rtol=1e-2 if dtype == np.float16 else 1e-3, - atol=1e-4 if dtype == np.float16 else 1e-5, ctx=ctx, dtype=dtype) - if dtype is not np.float16 and not skip_backward: - check_symbolic_backward(norm_sym, [in_data.astype(dtype)], - [np.ones(npy_out.shape).astype(out_dtype)], - [npy_out_backward], rtol=1e-3, atol=1e-5, ctx=ctx, - dtype=backward_dtype) - # Disable numeric gradient https://github.com/apache/incubator-mxnet/issues/11509 - # check gradient - if dtype is not np.float16 and not skip_backward: - check_numeric_gradient(norm_sym, [in_data], numeric_eps=epsilon, - rtol=1e-1, atol=1e-3, dtype=backward_dtype) - if i < in_data_dim-1: - norm_sym = mx.symbol.norm(data=data, ord=order, axis=(i, i+1), keepdims=True) - npy_out = l1norm(in_data, (i, i+1)) if order is 1 else l2norm(in_data, (i, i+1)) + for enforce_safe_acc in ['1', '0']: + with environment('MXNET_SAFE_ACCUMULATION', enforce_safe_acc): + for order in [1, 2]: + for dtype in [np.float16, np.float32, np.float64]: + for i in range(in_data_dim): + for out_dtype in ['float32', 'float64']: + backward_dtype = np.float32 if out_dtype == 'float32' else np.float64 + accumulation_type = acc_type[dtype] + if enforce_safe_acc == "0": + backward_dtype = dtype + out_dtype = dtype_to_str[dtype] + accumulation_type = dtype + skip_backward = 'int' in out_dtype + in_data = np.random.uniform(-1, 1, in_shape).astype(accumulation_type) + in_data[abs(in_data) < epsilon] = 2 * epsilon + norm_sym = mx.symbol.norm(data=data, ord=order, axis=i, out_dtype=out_dtype, keepdims=True) + npy_out = l1norm(in_data, i) if order is 1 else l2norm(in_data, i) npy_out_backward = np.sign(in_data) if order is 1 else in_data/npy_out - check_symbolic_forward(norm_sym, [in_data], [npy_out.astype(dtype)], - rtol=1e-2 if dtype is np.float16 else 1e-3, - atol=1e-4 if dtype is np.float16 else 1e-5, ctx=ctx) + check_symbolic_forward(norm_sym, [in_data.astype(dtype)], [npy_out.astype(out_dtype)], + rtol=1e-2 if dtype == np.float16 else 1e-3, + atol=1e-4 if dtype == np.float16 else 1e-5, ctx=ctx, dtype=dtype) if dtype is not np.float16 and not skip_backward: - check_symbolic_backward(norm_sym, [in_data], + check_symbolic_backward(norm_sym, [in_data.astype(dtype)], [np.ones(npy_out.shape).astype(out_dtype)], - [npy_out_backward.astype(out_dtype)], - rtol=1e-3, atol=1e-5, ctx=ctx, dtype=backward_dtype) - # check gradient - if dtype is not np.float16 and not skip_backward: - check_numeric_gradient(norm_sym, [in_data], numeric_eps=epsilon, - rtol=1e-1, atol=1e-3, dtype=backward_dtype) + [npy_out_backward], rtol=1e-3, atol=1e-5, ctx=ctx, + dtype=backward_dtype) + # Disable numeric gradient https://github.com/apache/incubator-mxnet/issues/11509 + # check gradient + if dtype is not np.float16 and not skip_backward: + check_numeric_gradient(norm_sym, [in_data], numeric_eps=epsilon, + rtol=1e-1, atol=1e-3, dtype=backward_dtype) + if i < in_data_dim-1: + norm_sym = mx.symbol.norm(data=data, ord=order, axis=(i, i+1), keepdims=True) + npy_out = l1norm(in_data, (i, i+1)) if order is 1 else l2norm(in_data, (i, i+1)) + npy_out_backward = np.sign(in_data) if order is 1 else in_data/npy_out + check_symbolic_forward(norm_sym, [in_data], [npy_out.astype(dtype)], + rtol=1e-2 if dtype is np.float16 else 1e-3, + atol=1e-4 if dtype is np.float16 else 1e-5, ctx=ctx) + if dtype is not np.float16 and not skip_backward: + check_symbolic_backward(norm_sym, [in_data], + [np.ones(npy_out.shape).astype(out_dtype)], + [npy_out_backward.astype(out_dtype)], + rtol=1e-3, atol=1e-5, ctx=ctx, dtype=backward_dtype) + # check gradient + if dtype is not np.float16 and not skip_backward: + check_numeric_gradient(norm_sym, [in_data], numeric_eps=epsilon, + rtol=1e-1, atol=1e-3, dtype=backward_dtype) @pytest.mark.parametrize('enforce_safe_acc', ['1', '0']) @@ -3563,19 +3557,19 @@ def l2norm(input_data, axis=0, keepdims=True): ]) def test_layer_norm(enforce_safe_acc, dtype, forward_check_eps, backward_check_eps, in_shape_l, finite_grad_check_l): - os.environ["MXNET_SAFE_ACCUMULATION"] = enforce_safe_acc - for in_shape, finite_grad_check in zip(in_shape_l, finite_grad_check_l): - for axis in range(-len(in_shape), len(in_shape)): - for eps in [1E-2, 1E-3]: - if dtype == np.float16: - npy_grad_check = False - else: - npy_grad_check = True - check_layer_normalization(in_shape, axis, eps, dtype=dtype, - forward_check_eps=forward_check_eps, - backward_check_eps=backward_check_eps, - npy_grad_check=npy_grad_check, - finite_grad_check=finite_grad_check) + with environment('MXNET_SAFE_ACCUMULATION', enforce_safe_acc): + for in_shape, finite_grad_check in zip(in_shape_l, finite_grad_check_l): + for axis in range(-len(in_shape), len(in_shape)): + for eps in [1E-2, 1E-3]: + if dtype == np.float16: + npy_grad_check = False + else: + npy_grad_check = True + check_layer_normalization(in_shape, axis, eps, dtype=dtype, + forward_check_eps=forward_check_eps, + backward_check_eps=backward_check_eps, + npy_grad_check=npy_grad_check, + finite_grad_check=finite_grad_check) # Numpy Implementation of Sequence Ops @@ -4971,6 +4965,7 @@ def softmax_forward(input_data, true_output): softmax_forward(mx.nd.array([[[[3.4e38,3.4e38]]]]), np.array([1.0,1.0])) @with_seed() +@with_environment('MXNET_SAFE_ACCUMULATION', '1') def test_softmax_dtype(): def check_dtypes_almost_equal(op_name, atol, rtol, @@ -4990,27 +4985,22 @@ def check_dtypes_almost_equal(op_name, ref_softmax.backward() assert_almost_equal(dtype_input.grad, ref_input.grad, rtol=grad_rtol, atol=grad_atol) - import sys - is_windows = sys.platform.startswith('win') - enforce_safe_acc = os.environ.get("MXNET_SAFE_ACCUMULATION", "0") - if not is_windows or enforce_safe_acc == "1": - os.environ["MXNET_SAFE_ACCUMULATION"] = "1" - check_dtypes_almost_equal('softmax', 1e-5, 1e-5, 1e-5, 1e-5, 'float16', 'float32') - check_dtypes_almost_equal('softmax', 1e-5, 1e-5, 1e-5, 1e-5, 'float16', 'float32', 'float32') - check_dtypes_almost_equal('softmax', 1e-5, 1e-5, 1e-5, 1e-5, 'float32', 'float64') - check_dtypes_almost_equal('softmax', 1e-5, 1e-5, 1e-5, 1e-5, 'float32', 'float64', 'float64') - check_dtypes_almost_equal('softmin', 1e-5, 1e-5, 1e-5, 1e-5, 'float16', 'float32') - check_dtypes_almost_equal('softmin', 1e-5, 1e-5, 1e-5, 1e-5, 'float16', 'float32', 'float32') - check_dtypes_almost_equal('softmin', 1e-5, 1e-5, 1e-5, 1e-5, 'float32', 'float64') - check_dtypes_almost_equal('softmin', 1e-5, 1e-5, 1e-5, 1e-5, 'float32', 'float64', 'float64') - check_dtypes_almost_equal('log_softmax', 1e-2, 1e-2, 1e-2, 1e-2, - 'float16', 'float32') - check_dtypes_almost_equal('log_softmax', 1e-2, 1e-2, 1e-2, 1e-2, - 'float16', 'float32', 'float32') - check_dtypes_almost_equal('log_softmax', 1e-3, 1e-3, 1e-3, 1e-3, - 'float32', 'float64') - check_dtypes_almost_equal('log_softmax', 1e-3, 1e-3, 1e-3, 1e-3, - 'float32', 'float64', 'float64') + check_dtypes_almost_equal('softmax', 1e-5, 1e-5, 1e-5, 1e-5, 'float16', 'float32') + check_dtypes_almost_equal('softmax', 1e-5, 1e-5, 1e-5, 1e-5, 'float16', 'float32', 'float32') + check_dtypes_almost_equal('softmax', 1e-5, 1e-5, 1e-5, 1e-5, 'float32', 'float64') + check_dtypes_almost_equal('softmax', 1e-5, 1e-5, 1e-5, 1e-5, 'float32', 'float64', 'float64') + check_dtypes_almost_equal('softmin', 1e-5, 1e-5, 1e-5, 1e-5, 'float16', 'float32') + check_dtypes_almost_equal('softmin', 1e-5, 1e-5, 1e-5, 1e-5, 'float16', 'float32', 'float32') + check_dtypes_almost_equal('softmin', 1e-5, 1e-5, 1e-5, 1e-5, 'float32', 'float64') + check_dtypes_almost_equal('softmin', 1e-5, 1e-5, 1e-5, 1e-5, 'float32', 'float64', 'float64') + check_dtypes_almost_equal('log_softmax', 1e-2, 1e-2, 1e-2, 1e-2, + 'float16', 'float32') + check_dtypes_almost_equal('log_softmax', 1e-2, 1e-2, 1e-2, 1e-2, + 'float16', 'float32', 'float32') + check_dtypes_almost_equal('log_softmax', 1e-3, 1e-3, 1e-3, 1e-3, + 'float32', 'float64') + check_dtypes_almost_equal('log_softmax', 1e-3, 1e-3, 1e-3, 1e-3, + 'float32', 'float64', 'float64') @with_seed() @@ -6051,12 +6041,12 @@ def np_random_data(shape, dtype=np.float32): @with_seed() def test_gemm(): _gemm_test_helper(np.float64, True) - os.environ["MXNET_CUDA_TENSOR_OP_MATH_ALLOW_CONVERSION"] = "0" - _gemm_test_helper(np.float32, True) - if default_context().device_type == 'gpu': - os.environ["MXNET_CUDA_TENSOR_OP_MATH_ALLOW_CONVERSION"] = "1" + with environment('MXNET_CUDA_TENSOR_OP_MATH_ALLOW_CONVERSION', '0'): _gemm_test_helper(np.float32, True) - os.environ["MXNET_CUDA_TENSOR_OP_MATH_ALLOW_CONVERSION"] = "0" + if default_context().device_type == 'gpu': + with environment('MXNET_CUDA_TENSOR_OP_MATH_ALLOW_CONVERSION', '1'): + _gemm_test_helper(np.float32, True) + # Helper functions for test_laop diff --git a/tests/python/unittest/test_runtime.py b/tests/python/unittest/test_runtime.py index d7017cfbfbb2..d117ac0f4b30 100644 --- a/tests/python/unittest/test_runtime.py +++ b/tests/python/unittest/test_runtime.py @@ -26,7 +26,7 @@ def test_features(): features = Features() print(features) assert 'CUDA' in features - assert len(features) >= 30 + assert len(features) >= 20 def test_is_singleton(): @@ -49,3 +49,6 @@ def test_is_enabled_not_existing(): with pytest.raises(RuntimeError): features.is_enabled('this girl is on fire') +def test_cxx11_abi(): + abi = mx.library.compiled_with_cxx11_abi() + assert abi or not abi diff --git a/tests/python/unittest/test_subgraph_op.py b/tests/python/unittest/test_subgraph_op.py index c8ddaf84de6d..9771a18618d8 100644 --- a/tests/python/unittest/test_subgraph_op.py +++ b/tests/python/unittest/test_subgraph_op.py @@ -21,7 +21,7 @@ from mxnet.base import SymbolHandle, check_call, _LIB, mx_uint, c_str_array, c_str, mx_real_t from mxnet.symbol import Symbol import numpy as np -from mxnet.test_utils import assert_almost_equal +from mxnet.test_utils import assert_almost_equal, environment from mxnet import gluon from mxnet.gluon import nn from mxnet import nd @@ -145,10 +145,6 @@ def test_subgraph_exe2(sym, subgraph_backend, op_names): """Use env var MXNET_SUBGRAPH_BACKEND=default to trigger graph partitioning in _simple_bind and compare results of the partitioned sym and the original sym.""" def get_executor(sym, subgraph_backend=None, op_names=None, original_exec=None): - if subgraph_backend is not None: - os.environ['MXNET_SUBGRAPH_BACKEND'] = subgraph_backend - check_call(_LIB.MXSetSubgraphPropertyOpNames(c_str(subgraph_backend), mx_uint(len(op_names)), - c_str_array(op_names))) exe = sym._simple_bind(ctx=mx.current_context(), grad_req='null') input_names = sym.list_inputs() for name in input_names: @@ -160,14 +156,15 @@ def get_executor(sym, subgraph_backend=None, op_names=None, original_exec=None): exe.aux_dict[name][:] = mx.nd.random.uniform(shape=exe.aux_dict[name].shape)\ if original_exec is None else original_exec.aux_dict[name] exe.forward() - if subgraph_backend is not None: - check_call(_LIB.MXRemoveSubgraphPropertyOpNames(c_str(subgraph_backend))) - del os.environ['MXNET_SUBGRAPH_BACKEND'] return exe sym, _, _ = sym original_exec = get_executor(sym) - partitioned_exec = get_executor(sym, subgraph_backend, op_names, original_exec) + with environment('MXNET_SUBGRAPH_BACKEND', subgraph_backend): + check_call(_LIB.MXSetSubgraphPropertyOpNames(c_str(subgraph_backend), mx_uint(len(op_names)), + c_str_array(op_names))) + partitioned_exec = get_executor(sym, subgraph_backend, op_names, original_exec) + check_call(_LIB.MXRemoveSubgraphPropertyOpNames(c_str(subgraph_backend))) outputs1 = original_exec.outputs outputs2 = partitioned_exec.outputs assert len(outputs1) == len(outputs2) @@ -210,10 +207,6 @@ def test_subgraph_exe4(sym, subgraph_backend, op_names): """Use env var MXNET_SUBGRAPH_BACKEND=default to trigger graph partitioning in bind and compare results of the partitioned sym and the original sym.""" def get_executor(sym, subgraph_backend=None, op_names=None, original_exec=None): - if subgraph_backend is not None: - os.environ['MXNET_SUBGRAPH_BACKEND'] = subgraph_backend - check_call(_LIB.MXSetSubgraphPropertyOpNames(c_str(subgraph_backend), mx_uint(len(op_names)), - c_str_array(op_names))) arg_shapes, _, aux_shapes = sym.infer_shape() if subgraph_backend is None: arg_array = [mx.nd.random.uniform(shape=shape) for shape in arg_shapes] @@ -226,14 +219,15 @@ def get_executor(sym, subgraph_backend=None, op_names=None, original_exec=None): aux_states=aux_array if subgraph_backend is None else original_exec.aux_arrays, grad_req='null') exe.forward() - if subgraph_backend is not None: - check_call(_LIB.MXRemoveSubgraphPropertyOpNames(c_str(subgraph_backend))) - del os.environ['MXNET_SUBGRAPH_BACKEND'] return exe sym, _, _ = sym original_exec = get_executor(sym) - partitioned_exec = get_executor(sym, subgraph_backend, op_names, original_exec) + with environment('MXNET_SUBGRAPH_BACKEND', subgraph_backend): + check_call(_LIB.MXSetSubgraphPropertyOpNames(c_str(subgraph_backend), mx_uint(len(op_names)), + c_str_array(op_names))) + partitioned_exec = get_executor(sym, subgraph_backend, op_names, original_exec) + check_call(_LIB.MXRemoveSubgraphPropertyOpNames(c_str(subgraph_backend))) outputs1 = original_exec.outputs outputs2 = partitioned_exec.outputs assert len(outputs1) == len(outputs2) diff --git a/tests/python/unittest/test_symbol.py b/tests/python/unittest/test_symbol.py index 1c84af0c668e..f93649afbe78 100644 --- a/tests/python/unittest/test_symbol.py +++ b/tests/python/unittest/test_symbol.py @@ -25,7 +25,7 @@ import numpy as np from common import assertRaises, models, TemporaryDirectory from mxnet.base import NotImplementedForSymbol -from mxnet.test_utils import discard_stderr, rand_shape_nd, use_np +from mxnet.test_utils import discard_stderr, rand_shape_nd, use_np, environment from mxnet.util import np_shape import pickle as pkl @@ -342,15 +342,6 @@ def test_gen_atomic_symbol_multiple_outputs(): def test_eliminate_common_expr(): - if not sys.platform.startswith('linux'): - logging.info("Bypass the CSE test on non-Linux OS as setting env variables during test does not work on Windows") - return - def set_back_env_var(var_name, old_env_var): - if old_env_var is None: - os.environ.pop(var_name) - else: - os.environ[var_name] = old_env_var - # helper function to test a single model def check_cse_on_symbol(sym, expected_savings, check_data, **kwargs): inputs = sym.list_inputs() @@ -363,41 +354,36 @@ def check_cse_on_symbol(sym, expected_savings, check_data, **kwargs): 'float32' : 1e-7, 'float64' : 1e-7, } - env_var_name = 'MXNET_ELIMINATE_COMMON_EXPR' - old_env_var = os.environ.get(env_var_name, None) - try: - for dtype in ['float16', 'float32', 'float64']: - data = {inp : kwargs[inp].astype(dtype) for inp in inputs} - for grad_req in ['write', 'add']: - type_dict = {inp : dtype for inp in inputs} - os.environ[env_var_name] = '0' + for dtype in ['float16', 'float32', 'float64']: + data = {inp : kwargs[inp].astype(dtype) for inp in inputs} + for grad_req in ['write', 'add']: + type_dict = {inp : dtype for inp in inputs} + with environment({'MXNET_ELIMINATE_COMMON_EXPR': '0'}): orig_exec = sym._simple_bind(ctx=mx.cpu(0), grad_req=grad_req, type_dict=type_dict, **shapes) - os.environ[env_var_name] = '1' + with environment({'MXNET_ELIMINATE_COMMON_EXPR': '1'}): cse_exec = sym._simple_bind(ctx=mx.cpu(0), grad_req=grad_req, type_dict=type_dict, **shapes) - fwd_orig = orig_exec.forward(is_train=True, **data) - out_grads = [mx.nd.ones_like(arr) for arr in fwd_orig] - orig_exec.backward(out_grads=out_grads) - fwd_cse = cse_exec.forward(is_train=True, **data) - cse_exec.backward(out_grads=out_grads) - if check_data: - for orig, cse in zip(fwd_orig, fwd_cse): - np.testing.assert_allclose(orig.asnumpy(), cse.asnumpy(), - rtol=rtol[dtype], atol=atol[dtype]) - for orig, cse in zip(orig_exec.grad_arrays, cse_exec.grad_arrays): - if orig is None and cse is None: - continue - assert orig is not None - assert cse is not None - np.testing.assert_allclose(orig.asnumpy(), cse.asnumpy(), - rtol=rtol[dtype], atol=atol[dtype]) - orig_sym_internals = orig_exec.get_optimized_symbol().get_internals() - cse_sym_internals = cse_exec.get_optimized_symbol().get_internals() - # test that the graph has been simplified as expected - assert (len(cse_sym_internals) + expected_savings) == len(orig_sym_internals) - finally: - set_back_env_var(env_var_name, old_env_var) + fwd_orig = orig_exec.forward(is_train=True, **data) + out_grads = [mx.nd.ones_like(arr) for arr in fwd_orig] + orig_exec.backward(out_grads=out_grads) + fwd_cse = cse_exec.forward(is_train=True, **data) + cse_exec.backward(out_grads=out_grads) + if check_data: + for orig, cse in zip(fwd_orig, fwd_cse): + np.testing.assert_allclose(orig.asnumpy(), cse.asnumpy(), + rtol=rtol[dtype], atol=atol[dtype]) + for orig, cse in zip(orig_exec.grad_arrays, cse_exec.grad_arrays): + if orig is None and cse is None: + continue + assert orig is not None + assert cse is not None + np.testing.assert_allclose(orig.asnumpy(), cse.asnumpy(), + rtol=rtol[dtype], atol=atol[dtype]) + orig_sym_internals = orig_exec.get_optimized_symbol().get_internals() + cse_sym_internals = cse_exec.get_optimized_symbol().get_internals() + # test that the graph has been simplified as expected + assert (len(cse_sym_internals) + expected_savings) == len(orig_sym_internals) a = mx.sym.Variable('a') b = mx.sym.Variable('b') @@ -479,3 +465,13 @@ def test_infershape_happens_for_all_ops_in_graph(): assert False +def test_symbol_copy(): + a = mx.sym.Variable('a') + b = copy.copy(a) + b._set_attr(name='b') + assert a.name == 'a' and b.name == 'b' + + a = mx.sym.Variable('a').as_np_ndarray() + b = copy.copy(a) + b._set_attr(name='b') + assert a.name == 'a' and b.name == 'b' diff --git a/tools/dependencies/cityhash.sh b/tools/dependencies/cityhash.sh index 6bc663e906fa..4e6c7fb776a6 100755 --- a/tools/dependencies/cityhash.sh +++ b/tools/dependencies/cityhash.sh @@ -20,6 +20,12 @@ # This script builds the static library of cityhash that can be used as dependency of mxnet. set -ex CITYHASH_VERSION=1.1.1 +if [[ $PLATFORM == 'darwin' ]]; then + DY_EXT="dylib" +else + DY_EXT="so" +fi + if [[ ! -f $DEPS_PATH/lib/libcityhash.a ]]; then # Download and build cityhash >&2 echo "Building cityhash..." @@ -30,5 +36,6 @@ if [[ ! -f $DEPS_PATH/lib/libcityhash.a ]]; then ./configure -prefix=$DEPS_PATH --enable-sse4.2 $MAKE CXXFLAGS="-g -O3 -msse4.2" $MAKE install + rm $DEPS_PATH/lib/*cityhash*$DY_EXT* popd fi diff --git a/tools/dependencies/libpng.sh b/tools/dependencies/libpng.sh index 39fa24c87ecd..93f1823da641 100755 --- a/tools/dependencies/libpng.sh +++ b/tools/dependencies/libpng.sh @@ -20,8 +20,7 @@ # This script builds the static library of libpng that can be used as dependency of mxnet/opencv. set -ex PNG_VERSION=1.6.35 -if [[ ! -f $DEPS_PATH/lib/libpng.a ]]; then - # download and build libpng +if [[ ! -f $DEPS_PATH/lib/libpng.a ]] && [[ ! -f $DEPS_PATH/lib64/libpng.a ]]; then # download and build libpng >&2 echo "Building libpng..." download \ https://github.com/glennrp/libpng/archive/v${PNG_VERSION}.zip \ diff --git a/tools/dependencies/libturbojpeg.sh b/tools/dependencies/libturbojpeg.sh index 911827a16fcf..88b8ec45a193 100755 --- a/tools/dependencies/libturbojpeg.sh +++ b/tools/dependencies/libturbojpeg.sh @@ -25,8 +25,8 @@ if [[ $PLATFORM == 'darwin' ]]; then JPEG_NASM_OPTION="-D CMAKE_ASM_NASM_COMPILER=/usr/local/bin/nasm" fi -if [[ ! -f $DEPS_PATH/lib/libjpeg.a ]] || [[ ! -f $DEPS_PATH/lib/libturbojpeg.a ]]; then - # download and build libjpeg +if [[ ( ! -f $DEPS_PATH/lib/libjpeg.a ) || ( ! -f $DEPS_PATH/lib/libturbojpeg.a ) ]] && \ + [[ ( ! -f $DEPS_PATH/lib64/libjpeg.a ) || ( ! -f $DEPS_PATH/lib64/libturbojpeg.a ) ]]; then # download and build libjpeg >&2 echo "Building libjpeg-turbo..." download \ https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${TURBO_JPEG_VERSION}.zip \ diff --git a/tools/dependencies/lz4.sh b/tools/dependencies/lz4.sh index ce72908fdc2b..ec4b04576a86 100755 --- a/tools/dependencies/lz4.sh +++ b/tools/dependencies/lz4.sh @@ -20,6 +20,12 @@ # This script builds the static library of lz4 that can be used as dependency of mxnet. set -ex LZ4_VERSION=r130 +if [[ $PLATFORM == 'darwin' ]]; then + DY_EXT="dylib" +else + DY_EXT="so" +fi + if [[ ! -f $DEPS_PATH/lib/liblz4.a ]]; then # Download and build lz4 >&2 echo "Building lz4..." @@ -31,5 +37,6 @@ if [[ ! -f $DEPS_PATH/lib/liblz4.a ]]; then cd $DEPS_PATH/lz4-$LZ4_VERSION $MAKE $MAKE PREFIX=$DEPS_PATH install + rm $DEPS_PATH/lib/*lz4*$DY_EXT* popd fi diff --git a/tools/dependencies/openssl.sh b/tools/dependencies/openssl.sh index 78673a3ac84b..cc989a254057 100755 --- a/tools/dependencies/openssl.sh +++ b/tools/dependencies/openssl.sh @@ -20,8 +20,8 @@ # This script builds the static library of openssl that can be used as dependency of mxnet. set -ex OPENSSL_VERSION=1.1.1b -if [[ ! -f $DEPS_PATH/lib/libssl.a ]] || [[ ! -f $DEPS_PATH/lib/libcrypto.a ]]; then - # download and build openssl +if [[ ( ! -f $DEPS_PATH/lib/libssl.a ) || ( ! -f $DEPS_PATH/lib/libcrypto.a ) ]] && \ + [[ ( ! -f $DEPS_PATH/lib64/libssl.a ) || ( ! -f $DEPS_PATH/lib64/libcrypto.a ) ]]; then # download and build openssl >&2 echo "Building openssl..." OPENSSL_VERSION=$(echo $OPENSSL_VERSION | sed 's/\./_/g') download \ diff --git a/tools/dependencies/protobuf.sh b/tools/dependencies/protobuf.sh index 7da4c2537b42..4b58a1cd31ff 100755 --- a/tools/dependencies/protobuf.sh +++ b/tools/dependencies/protobuf.sh @@ -20,11 +20,6 @@ # This script builds the static library of protobuf along with protoc, that can be used as dependency of mxnet. set -ex PROTOBUF_VERSION=3.5.1 -if [[ $PLATFORM == 'darwin' ]]; then - DY_EXT="dylib" -else - DY_EXT="so" -fi LIBPROTOBUF="$DEPS_PATH/lib/libprotobuf.$DY_EXT" LIBPROTOC="$DEPS_PATH/lib/libprotoc.$DY_EXT" diff --git a/tools/dependencies/zmq.sh b/tools/dependencies/zmq.sh index 33ea628d53bb..0ab5335e9045 100755 --- a/tools/dependencies/zmq.sh +++ b/tools/dependencies/zmq.sh @@ -20,6 +20,12 @@ # This script builds the static library of zeroMQ that can be used as dependency of mxnet. set -ex ZEROMQ_VERSION=4.2.2 +if [[ $PLATFORM == 'darwin' ]]; then + DY_EXT="dylib" +else + DY_EXT="so" +fi + if [[ ! -f $DEPS_PATH/lib/libzmq.a ]]; then # Download and build zmq >&2 echo "Building zmq..." @@ -39,8 +45,11 @@ if [[ ! -f $DEPS_PATH/lib/libzmq.a ]]; then $MAKE install if [[ ! -f $DEPS_PATH/lib/libzmq.a ]]; then + rm $DEPS_PATH/lib64/*zmq*$DY_EXT* mkdir -p $DEPS_PATH/lib cp $DEPS_PATH/lib64/*zmq* $DEPS_PATH/lib + else + rm $DEPS_PATH/lib/*zmq*$DY_EXT* fi popd diff --git a/tools/im2rec.cc b/tools/im2rec.cc index 989b3147830d..ddb3f7f11c1e 100644 --- a/tools/im2rec.cc +++ b/tools/im2rec.cc @@ -247,7 +247,7 @@ int main(int argc, char *argv[]) { if (unchanged != 1) { cv::Mat img = cv::imdecode(decode_buf, color_mode); - CHECK(img.data != NULL) << "OpenCV decode fail:" << path; + CHECK(img.data != nullptr) << "OpenCV decode fail:" << path; cv::Mat res = img; if (new_size > 0) { if (center_crop) { diff --git a/tools/pip/setup.py b/tools/pip/setup.py index 2377e6177641..132188d01107 100644 --- a/tools/pip/setup.py +++ b/tools/pip/setup.py @@ -64,7 +64,8 @@ def has_ext_modules(self): DEPENDENCIES = [ 'numpy<2.0.0,>1.16.0', 'requests>=2.20.0,<3', - 'graphviz<0.9.0,>=0.8.1' + 'graphviz<0.9.0,>=0.8.1', + 'contextvars;python_version<"3.7"' ] shutil.rmtree(os.path.join(CURRENT_DIR, 'mxnet'), ignore_errors=True) @@ -192,12 +193,8 @@ def skip_markdown_comments(md): 'Intended Audience :: Education', 'Intended Audience :: Science/Research', 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: C++', 'Programming Language :: Cython', - 'Programming Language :: Other', # R, Scala - 'Programming Language :: Perl', 'Programming Language :: Python', - 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8',