var v_new = function (v) {
    var temp = v_new_toggle;
    v_new_toggle = true;
    var r = new v;
    v_new_toggle = temp;
    return r
}
const Canvas = require("canvas");
const fss = require("fs");
_console = console.log


let ENV = {
    "windowParams": {
        "featurePolicy": {
            "features": ["geolocation", "gamepad", "ch-ect", "midi", "display-capture", "usb", "local-fonts", "picture-in-picture", "publickey-credentials-get", "otp-credentials", "encrypted-media", "ch-save-data", "ch-ua-full-version-list", "ch-ua-wow64", "ch-downlink", "ch-prefers-color-scheme", "sync-xhr", "ch-ua-model", "serial", "camera", "ch-prefers-reduced-motion", "bluetooth", "identity-credentials-get", "ch-ua-full-version", "fullscreen", "ch-dpr", "keyboard-map", "ch-ua-platform", "gyroscope", "window-placement", "ch-ua-mobile", "ch-ua", "magnetometer", "accelerometer", "ch-ua-arch", "xr-spatial-tracking", "idle-detection", "ch-ua-platform-version", "ch-width", "clipboard-read", "ch-viewport-width", "payment", "ch-viewport-height", "ch-rtt", "autoplay", "cross-origin-isolated", "hid", "ch-ua-bitness", "screen-wake-lock", "clipboard-write", "ch-device-memory", "microphone"],
            "allowedFeatures": ["geolocation", "gamepad", "ch-ect", "midi", "display-capture", "usb", "local-fonts", "picture-in-picture", "publickey-credentials-get", "otp-credentials", "encrypted-media", "ch-save-data", "ch-ua-full-version-list", "ch-ua-wow64", "ch-downlink", "ch-prefers-color-scheme", "sync-xhr", "ch-ua-model", "serial", "camera", "ch-prefers-reduced-motion", "bluetooth", "identity-credentials-get", "ch-ua-full-version", "fullscreen", "ch-dpr", "keyboard-map", "ch-ua-platform", "gyroscope", "window-placement", "ch-ua-mobile", "ch-ua", "magnetometer", "accelerometer", "ch-ua-arch", "xr-spatial-tracking", "idle-detection", "ch-ua-platform-version", "ch-width", "clipboard-read", "ch-viewport-width", "payment", "ch-viewport-height", "ch-rtt", "autoplay", "cross-origin-isolated", "hid", "ch-ua-bitness", "screen-wake-lock", "clipboard-write", "ch-device-memory", "microphone"],
            "getAllowlistForFeature": "url"
        },
        "innerHeight": 858,
        "innerWidth": 2560,
        "outerHeight": 969,
        "outerWidth": 2560,
        "screenX": 0,
        "screenY": 25,
        "pageYOffset": 0,
        "devicePixelRatio": 1
    },
    "screenParams": {
        "height": 1080,
        "width": 2560,
        "availHeight": 970,
        "availWidth": 2560,
        "pixelDepth": 24,
        "colorDepth": 24
    },
    "navigatorParams": {
        "appName": "Netscape",
        "appVersion": "5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
        "hardwareConcurrency": 20,
        "maxTouchPoints": 0,
        "platform": "MacIntel",
        "product": "Gecko",
        "productSub": "20030107",
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
        "vendor": "Google Inc.",
        "vendorSub": "",
        "doNotTrack": null
    },
    "plugins": {
        "0": {
            "0": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "application/pdf",
                "enabledPlugin": []
            },
            "1": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "text/pdf",
                "enabledPlugin": []
            },
            "application/pdf": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "application/pdf",
                "enabledPlugin": []
            },
            "text/pdf": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "text/pdf",
                "enabledPlugin": []
            },
            "description": "Portable Document Format",
            "filename": "internal-pdf-viewer",
            "length": 2,
            "name": "PDF Viewer"
        },
        "1": {
            "0": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "application/pdf",
                "enabledPlugin": []
            },
            "1": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "text/pdf",
                "enabledPlugin": []
            },
            "application/pdf": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "application/pdf",
                "enabledPlugin": []
            },
            "text/pdf": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "text/pdf",
                "enabledPlugin": []
            },
            "description": "Portable Document Format",
            "filename": "internal-pdf-viewer",
            "length": 2,
            "name": "Chrome PDF Viewer"
        },
        "2": {
            "0": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "application/pdf",
                "enabledPlugin": []
            },
            "1": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "text/pdf",
                "enabledPlugin": []
            },
            "application/pdf": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "application/pdf",
                "enabledPlugin": []
            },
            "text/pdf": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "text/pdf",
                "enabledPlugin": []
            },
            "description": "Portable Document Format",
            "filename": "internal-pdf-viewer",
            "length": 2,
            "name": "Chromium PDF Viewer"
        },
        "3": {
            "0": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "application/pdf",
                "enabledPlugin": []
            },
            "1": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "text/pdf",
                "enabledPlugin": []
            },
            "application/pdf": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "application/pdf",
                "enabledPlugin": []
            },
            "text/pdf": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "text/pdf",
                "enabledPlugin": []
            },
            "description": "Portable Document Format",
            "filename": "internal-pdf-viewer",
            "length": 2,
            "name": "Microsoft Edge PDF Viewer"
        },
        "4": {
            "0": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "application/pdf",
                "enabledPlugin": []
            },
            "1": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "text/pdf",
                "enabledPlugin": []
            },
            "application/pdf": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "application/pdf",
                "enabledPlugin": []
            },
            "text/pdf": {
                "description": "Portable Document Format",
                "suffixes": "pdf",
                "type": "text/pdf",
                "enabledPlugin": []
            },
            "description": "Portable Document Format",
            "filename": "internal-pdf-viewer",
            "length": 2,
            "name": "WebKit built-in PDF"
        }
    },
    "mimeTypes": [{
        "description": "Portable Document Format",
        "suffixes": "pdf",
        "type": "application/pdf"
    }, {"description": "Portable Document Format", "suffixes": "pdf", "type": "text/pdf"}],
    "fontsRes": {
        "72px monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px ARNOPRO, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px ARNOPRO, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px ARNOPRO, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px AgencyFB, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px AgencyFB, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px AgencyFB, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px ArabicTypesetting, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px ArabicTypesetting, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px ArabicTypesetting, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px ArialUnicodeMS, monospace": {
            "mmmmmmmmlli": {
                "width": 527.80078125,
                "actualBoundingBoxAscent": -4.3515625,
                "actualBoundingBoxLeft": -4.67578125,
                "actualBoundingBoxRight": 522.94921875,
                "fontBoundingBoxAscent": 21.109375,
                "actualBoundingBoxDescent": 55.890625
            }
        },
        "72px ArialUnicodeMS, sans-serif": {
            "mmmmmmmmlli": {
                "width": 527.80078125,
                "actualBoundingBoxAscent": -4.3515625,
                "actualBoundingBoxLeft": -4.67578125,
                "actualBoundingBoxRight": 522.94921875,
                "fontBoundingBoxAscent": 21.109375,
                "actualBoundingBoxDescent": 55.890625
            }
        },
        "72px ArialUnicodeMS, serif": {
            "mmmmmmmmlli": {
                "width": 527.80078125,
                "actualBoundingBoxAscent": -4.3515625,
                "actualBoundingBoxLeft": -4.67578125,
                "actualBoundingBoxRight": 522.94921875,
                "fontBoundingBoxAscent": 21.109375,
                "actualBoundingBoxDescent": 55.890625
            }
        },
        "72px AvantGardeBkBT, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px AvantGardeBkBT, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px AvantGardeBkBT, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px BankGothicMdBT, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px BankGothicMdBT, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px BankGothicMdBT, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Batang, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Batang, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Batang, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px BitstreamVeraSansMono, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px BitstreamVeraSansMono, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px BitstreamVeraSansMono, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Calibri, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Calibri, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Calibri, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Century, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Century, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Century, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px CenturyGothic, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px CenturyGothic, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px CenturyGothic, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Clarendon, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Clarendon, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Clarendon, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px EUROSTILE, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px EUROSTILE, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px EUROSTILE, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px FranklinGothic, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px FranklinGothic, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px FranklinGothic, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px FuturaBkBT, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px FuturaBkBT, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px FuturaBkBT, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px FuturaMdBT, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px FuturaMdBT, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px FuturaMdBT, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px GOTHAM, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px GOTHAM, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px GOTHAM, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px GillSans, monospace": {
            "mmmmmmmmlli": {
                "width": 491.44921875,
                "actualBoundingBoxAscent": -4.90234375,
                "actualBoundingBoxLeft": -4.25390625,
                "actualBoundingBoxRight": 487.3359375,
                "fontBoundingBoxAscent": 11.984375,
                "actualBoundingBoxDescent": 54.015625
            }
        },
        "72px GillSans, sans-serif": {
            "mmmmmmmmlli": {
                "width": 491.44921875,
                "actualBoundingBoxAscent": -4.90234375,
                "actualBoundingBoxLeft": -4.25390625,
                "actualBoundingBoxRight": 487.3359375,
                "fontBoundingBoxAscent": 11.984375,
                "actualBoundingBoxDescent": 54.015625
            }
        },
        "72px GillSans, serif": {
            "mmmmmmmmlli": {
                "width": 491.44921875,
                "actualBoundingBoxAscent": -4.90234375,
                "actualBoundingBoxLeft": -4.25390625,
                "actualBoundingBoxRight": 487.3359375,
                "fontBoundingBoxAscent": 11.984375,
                "actualBoundingBoxDescent": 54.015625
            }
        },
        "72px HELV, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px HELV, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px HELV, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Haettenschweiler, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Haettenschweiler, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Haettenschweiler, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px HelveticaNeue, monospace": {
            "mmmmmmmmlli": {
                "width": 539.2800903320312,
                "actualBoundingBoxAscent": -7.435752868652344,
                "actualBoundingBoxLeft": -4.6080002784729,
                "actualBoundingBoxRight": 534.3840942382812,
                "fontBoundingBoxAscent": 10.15625,
                "actualBoundingBoxDescent": 58.84375
            }
        },
        "72px HelveticaNeue, sans-serif": {
            "mmmmmmmmlli": {
                "width": 539.2800903320312,
                "actualBoundingBoxAscent": -7.435752868652344,
                "actualBoundingBoxLeft": -4.6080002784729,
                "actualBoundingBoxRight": 534.3840942382812,
                "fontBoundingBoxAscent": 10.15625,
                "actualBoundingBoxDescent": 58.84375
            }
        },
        "72px HelveticaNeue, serif": {
            "mmmmmmmmlli": {
                "width": 539.2800903320312,
                "actualBoundingBoxAscent": -7.435752868652344,
                "actualBoundingBoxLeft": -4.6080002784729,
                "actualBoundingBoxRight": 534.3840942382812,
                "fontBoundingBoxAscent": 10.15625,
                "actualBoundingBoxDescent": 58.84375
            }
        },
        "72px Humanst521BT, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Humanst521BT, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Humanst521BT, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Leelawadee, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Leelawadee, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Leelawadee, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px LetterGothic, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px LetterGothic, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px LetterGothic, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px LevenimMT, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px LevenimMT, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px LevenimMT, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px LucidaBright, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px LucidaBright, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px LucidaBright, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px LucidaSans, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px LucidaSans, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px LucidaSans, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px MSMincho, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px MSMincho, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px MSMincho, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px MSOutlook, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px MSOutlook, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px MSOutlook, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px MSReferenceSpecialty, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px MSReferenceSpecialty, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px MSReferenceSpecialty, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px MSUIGothic, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px MSUIGothic, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px MSUIGothic, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px MTExtra, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px MTExtra, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px MTExtra, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px MYRIADPRO, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px MYRIADPRO, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px MYRIADPRO, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Marlett, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Marlett, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Marlett, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px MeiryoUI, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px MeiryoUI, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px MeiryoUI, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px MicrosoftUighur, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px MicrosoftUighur, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px MicrosoftUighur, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px MinionPro, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px MinionPro, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px MinionPro, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px MonotypeCorsiva, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px MonotypeCorsiva, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px MonotypeCorsiva, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px PMingLiU, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px PMingLiU, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px PMingLiU, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Pristina, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Pristina, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Pristina, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px SCRIPTINA, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px SCRIPTINA, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px SCRIPTINA, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px SegoeUILight, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px SegoeUILight, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px SegoeUILight, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Serifa, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Serifa, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Serifa, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px SimHei, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px SimHei, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px SimHei, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px SmallFonts, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px SmallFonts, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px SmallFonts, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Staccato222BT, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Staccato222BT, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Staccato222BT, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px TRAJANPRO, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px TRAJANPRO, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px TRAJANPRO, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px UniversCE55Medium, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px UniversCE55Medium, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px UniversCE55Medium, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px Vrinda, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px Vrinda, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px Vrinda, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        },
        "72px ZWAdobeF, monospace": {
            "mmmmmmmmlli": {
                "width": 475.27734375,
                "actualBoundingBoxAscent": -8.015625,
                "actualBoundingBoxLeft": 0.0703125,
                "actualBoundingBoxRight": 470.8828125,
                "fontBoundingBoxAscent": 8.609375,
                "actualBoundingBoxDescent": 56.390625
            }
        },
        "72px ZWAdobeF, sans-serif": {
            "mmmmmmmmlli": {
                "width": 544.751953125,
                "actualBoundingBoxAscent": -9.505874633789062,
                "actualBoundingBoxLeft": -4.4639997482299805,
                "actualBoundingBoxRight": 539.9279174804688,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 61.921875
            }
        },
        "72px ZWAdobeF, serif": {
            "mmmmmmmmlli": {
                "width": 510.76788330078125,
                "actualBoundingBoxAscent": -10.081871032714844,
                "actualBoundingBoxLeft": -1.7280000448226929,
                "actualBoundingBoxRight": 509.0398864746094,
                "fontBoundingBoxAscent": 14.078125,
                "actualBoundingBoxDescent": 57.88987731933594
            }
        }
    },
    "imgsRes": {
        "94px sans-serif": {
            "18,90,1,1": "214,122,6,255",
            "38,77,1,1": "255,255,255,255",
            "48,28,1,1": "0,0,0,0",
            "94,23,1,1": "0,0,0,0",
            "26,46,1,1": "253,243,245,255",
            "47,23,1,1": "0,0,0,0",
            "37,17,1,1": "0,0,0,255",
            "62,28,1,1": "204,131,217,255"
        }
    },
    "glRes": {
        "3379": 16384,
        "3410": 8,
        "3411": 8,
        "3412": 8,
        "3413": 8,
        "3414": 24,
        "3415": 0,
        "7936": "WebKit",
        "7937": "WebKit WebGL",
        "7938": "WebGL 1.0 (OpenGL ES 2.0 Chromium)",
        "34024": 16384,
        "34047": 16,
        "34076": 16384,
        "34921": 16,
        "34930": 16,
        "35660": 16,
        "35661": 32,
        "35724": "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)",
        "36347": 1024,
        "36348": 32,
        "36349": 1024,
        "37445": "Google Inc. (ATI Technologies Inc.)",
        "37446": "ANGLE (ATI Technologies Inc., AMD Radeon RX 560 OpenGL Engine, OpenGL 4.1)"
    },
    "jpg": "data:image/png;base64, ",
    "jpg2": {
        "data": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
        "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAAXNSR0IArs4c6QAAAA9JREFUGFdjZMACGGkgCAABpAAGvg7NcwAAAABJRU5ErkJggg=="
    },
    "canPlay": {
        "audio/aac; codecs=\"flac\"": "",
        "audio/flac": "probably",
        "audio/mpeg; codecs=\"mp3\"": "probably",
        "audio/mpeg; codecs=\"vp9\"": "",
        "audio/webm; codecs=\"vp8\"": "",
        "audio/webz": "",
        "audio/x-m4a; codecs=\"mp3\"": "",
        "audio/x-m4a; codecs=\"vp8, mp4a.40\"": "",
        "audio/x-m4a; codecs=\"vp9, mp4a.40.2\"": "",
        "video/mp4": "maybe",
        "video/mp4; codecs=\"ac-3\"": "",
        "video/mp4; codecs=\"avc1.42011E\"": "",
        "video/mp4; codecs=\"avc1.42E009\"": "maybe",
        "video/mp4; codecs=\"avc1.42E034\"": "probably",
        "video/mp4; codecs=\"avc1.42F01E\"": "probably",
        "video/mp4; codecs=\"avc1.4D001E\"": "probably",
        "video/mp4; codecs=\"avc3.42001E\"": "probably",
        "video/mp4; codecs=\"avc3.42E01E, mp4a.40.29\"": "probably",
        "video/mp4; codecs=\"flac\"": "probably",
        "video/mp4; codecs=\"hev1\"": "",
        "video/mp4; codecs=\"hvc1x\"": "",
        "video/mp4; codecs=\"lavc1337\"": "",
        "video/mp4; codecs=\"mp4a.40.02\"": "probably",
        "video/mp4; codecs=\"mp4a.40.5\"": "probably",
        "video/mp4; codecs=\"mp4a.67\"": "probably",
        "video/mp4; codecs=\"opus\"": "probably",
        "video/ogg; codecs=\"flac\"": "probably",
        "video/ogg; codecs=\"opus\"": "probably",
        "video/ogg; codecs=\"vp8\"": "probably",
        "video/webm": "maybe",
        "video/webm; codecs=\"av01.0.04M.08\"": "probably",
        "video/webm; codecs=\"vp09.02.10.08\"": "probably",
        "video/x-dv": "",
        "video/x-m4v; codecs=\"avc1.42AC23\"": "maybe"
    }
}

let randomEvent = false;
let timeout = true;
let imgRes = {}
let imgs = Object.keys(ENV.imgsRes['94px sans-serif'])
for (let i = 0; i < imgs.length; i++) {
    let t = ENV.imgsRes['94px sans-serif'][imgs[i]].split(',');
    let r = [];
    for (let j = 0; j < t.length; j++) {
        r.push(parseInt(t[j]))
    }
    imgRes[imgs[i]] = r;
}
ENV.imgsRes['94px sans-serif'] = imgRes
// const GRAPHIC_DRIVER = drives[parseInt(Math.random() * drives.length)]
proxy = function (tt, name) {
    return new Proxy(tt, {
        get(target, p, receiver) {
            let res = Reflect.get(target, p, receiver);
            if (p !== 'debug' && p !== 'Object') {
                console.log(`${name} get`, p, typeof res)
            }
            // if (p === 'offsetHeight'){
            //   debugger;
            // }
            if (p === 'exec') {
                return v_saf(function (args) {
                    console.log(`${name} exec`, args)

                    return /{\s*\[\s*native\s+code\s*]\s*}\s*$/.exec(args)
                })
            }
            // console.log(Reflect.get(target, '_cf_chl_ctx', receiver))

            if (!['_registeredHandlers', 'window', '_currentEvent', 'debug', '_eventListenerss', 'top', 'prototype'].includes(p) && res && typeof res === 'object' && typeof p !== 'symbol') {
                return proxy(res, p)
            }
            return res;
        },
        // getPrototypeOf(target) {
        //
        // },

        set(target, p, newValue, receiver) {
            console.log(`${name} set`, p, typeof newValue)

            return Reflect.set(target, p, newValue, receiver)
        }
    })
}

var v_saf;
!function () {
    var n = Function.toString, t = [], i = [], o = [].indexOf.bind(t), e = [].push.bind(t), r = [].push.bind(i);

    function u(n, t, tag) {
        return -1 == o(n) && (e(n), r(`function ${tag ? tag : ""}${t || n.name || ""}() { [native code] }`.replaceAll("get get", 'get'))), n
    }

    Object.defineProperty(Function.prototype, "toString", {
        enumerable: !1,
        configurable: !0,
        writable: !0,
        value: function () {
            return "function" == typeof this && i[o(this)] || n.call(this)
        }
    }), u(Function.prototype.toString, "toString"), v_saf = u
}();
const jsdom = require("./jsdom");
const path = require("ghost-cursor").path;
const {
    Worker, isMainThread, parentPort, workerData
} = require('worker_threads');
const crypto = require("crypto"); // 引入 jsdom

var _random = Math.random
Date.prototype.toString = v_saf(function () {
    try {
        return this.getTime()
    } catch (e) {
        return Date.now()
    }
}, 'toString')

// Date.now = function now() {
//     return 1685096207545
// };
// Date.parse = function () {
//     return 1685096207545
// };
// Date.prototype.valueOf = function () {
//     return 1685096207545
// };
// Date.prototype.getTime = function () {
//     return 1685096207545
// };
// Date.prototype.toString = function () {
//     return 1685096207545
// };
// Performance.prototype.now = function now() {
//     return Number('1685096207545'.slice(8))
// }
//
// Math.random = function random() {
//     return 0.08636862211354912
// };
ENV.navigatorParams.userAgent =    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"


const {
    JSDOM
} = jsdom; // 引出 JSDOM 类， 等同于 JSDOM = jsdom.JSDOM

const dom = new JSDOM(`:status: 200
cache-control: no-cache, no-store
content-type: text/html
content-encoding: gzip
x-robots-tag: noindex
content-length: 1329
strict-transport-security: max-age=31536000

<!DOCTYPE html>
<html>
    <head>
        <noscript>
            <title>Pardon Our Interruption</title>
        </noscript>

        <meta name="viewport" content="width=1000">
        <meta name="robots" content="noindex, nofollow">
        <meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="expires" content="0">

        <style>
            .container { max-width: 800px; margin: auto; font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; color: #7a838c; }
            h1 { color: #2a2d30; font-weight: 500; }
            li { margin: 0 0 10px; }
            a { color: #428bca; }
            a:hover, a:focus { color: #2a6496; }
        </style>

        <script>
          var isSpa = new URLSearchParams(window.location.search).get('X-SPA') === '1';
        </script>

        <!-- This head template should be placed before the following script tag that loads the challenge script -->
        <script>
          window.onProtectionInitialized = function(protection) {
            if (protection && protection.cookieIsSet && !protection.cookieIsSet()) {
              showBlockPage();
              return;
            }
            if (!isSpa) {
              window.parent.location.reload(true);
            }
          };
          window.reeseSkipExpirationCheck = true;
        </script>

        <script>
          if (!isSpa) {
            var scriptElement = document.createElement('script');
            scriptElement.type = "text/javascript";
            scriptElement.src = "/Two-discharted-Not-ere-int-when-is-are-Poss-A-Sa";
            scriptElement.async = true;
            scriptElement.defer = true;
            document.head.appendChild(scriptElement);
          }
        </script>
    </head>
    <body>

        

        <div class="container">
            <script>document.getElementsByClassName("container")[0].style.display = "none";</script>
            <h1>Pardon Our Interruption</h1>
            <p>As you were browsing something about your browser made us think you were a bot. There are a few reasons this might happen:</p>
            <ul>
                <noscript><li>You've disabled JavaScript in your web browser.</li></noscript>
                <li>You're a power user moving through this website with super-human speed.</li>
                <li>You've disabled cookies in your web browser.</li>
                <li>A third-party browser plugin, such as Ghostery or NoScript, is preventing JavaScript from running. Additional information is available in this <a title='Third party browser plugins that block javascript' href='http://ds.tl/help-third-party-plugins' target='_blank'>support article</a>.</li>
            </ul>


            <p>To regain access, please make sure that cookies and JavaScript are enabled before reloading the page.</p>

        </div>
        <script>
          function showBlockPage() {
            document.title = "Pardon Our Interruption";
            document.getElementsByClassName("container")[0].style.display = "block";
          }

          if (isSpa) {
            showBlockPage();
          } else {
            setTimeout(showBlockPage, 10000);
          }
        </script>
    </body>
</html>
`, {
    // url: "https://www.volaris.com/booking/flights?from=JFK&to=STT&depart=2023-09-14&return=2023-09-16&isMultiCity=false&noOfRoute=1&lang=en&adults=1&children=0&infants=0&sharedMarket=false&roundTripFaresFlag=false&usePoints=false",
    url: "https://beta.makeabooking.flyscoot.com/Book/Flight?culture=en-SG&type=oneway&dst1=HKG&ast1=SIN&dst2=SIN&ast2=HKG&dd=2023-10-28&rd=null&adt=1&chd=0&inf=0",
    // window.location，document.URL
    // referrer: "https://www.volaris.com/booking/flights?from=JFK&to=STT&depart=2023-09-14&return=2023-09-16&isMultiCity=false&noOfRoute=1&lang=en&adults=1&children=0&infants=0&sharedMarket=false&roundTripFaresFlag=false&usePoints=false",
    referrer: "https://beta.makeabooking.flyscoot.com/Book/Flight?culture=en-SG&type=oneway&dst1=HKG&ast1=SIN&dst2=SIN&ast2=HKG&dd=2023-10-28&rd=null&adt=1&chd=0&inf=0",
    // document.referrer
    contentType: "text/html",
    // document.contentType
    userAgent: ENV.navigatorParams.userAgent,
    runScripts: 'dangerously',
    // userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    // UA
    includeNodeLocations: false // 保留由HTML解析器生成的位置信息，允许使用nodeLocation()方法

});
window = dom.window;
window.Math = Math
var _stringify = window.JSON.stringify;
window.JSON.stringify = v_saf(function stringify() {
    if (arguments[0] && arguments[0] == "OffscreenCanvasRenderingContext2D;;;webkitResolveLocalFileSystemURL;;;AuthenticatorAttestationResponse;;;AuthenticatorAssertionResponse") {
        return `"WritableStreamDefaultController;;;VirtualKeyboardGeometryChangeEvent;;;TransformStreamDefaultController;;;SVGComponentTransferFunctionElement;;;SVGAnimatedPreserveAspectRatio;;;ReadableStreamDefaultController;;;RTCPeerConnectionIceErrorEvent;;;OffscreenCanvasRenderingContext2D;;;NavigationCurrentEntryChangeEvent;;;MediaStreamAudioDestinationNode;;;WebTransportBidirectionalStream;;;WebTransportDatagramDuplexStream;;;AuthenticatorAssertionResponse;;;AuthenticatorAttestationResponse;;;BluetoothCharacteristicProperties;;;BluetoothRemoteGATTCharacteristic;;;PresentationConnectionAvailableEvent;;;PresentationConnectionCloseEvent;;;USBIsochronousInTransferPacket;;;USBIsochronousInTransferResult;;;USBIsochronousOutTransferPacket;;;USBIsochronousOutTransferResult;;;WindowControlsOverlayGeometryChangeEvent;;;oncontentvisibilityautostatechange;;;BrowserCaptureMediaStreamTrack;;;ContentVisibilityAutoStateChangeEvent;;;webkitResolveLocalFileSystemURL"`
    }

    if (arguments[0] && arguments[0][0] && arguments[0][0][0] === "onbeforeprint") {
        return '[["onbeforeinstallprompt","gsec"],["onbeforexrselect","gsec"],["onbeforeinput","gsec"],["onblur","gsec"],["onbeforeprint","gsec"],["onbeforeunload","gsec"],["onunhandledrejection","gsec"],["onunload","gsec"],["onbeforematch","gsec"],["onbeforetoggle","gsec"]]'
    }
    console.log("JSON.stringify", arguments)
    if (Array.isArray(arguments[0]) && typeof arguments[0][0] === 'string' && arguments[0][0][0] === '_'){
        return '[]'
    }
    let res = _stringify.apply(this, arguments)
    if (res.length > 130000) {
        console.log(res)
    }
    return res;
})
window.PERSISTENT = 1
window.TEMPORARY = 0
window.openDatabase = function () {

}
location = window.location;
performance = window.performance;
window.visualViewport = {
    height: 858,
    offsetLeft: 0,
    offsetTop: 0,
    onresize: null,
    onscroll: null,
    pageLeft: 0,
    pageTop: 1709,
    scale: 1,
    width: 637,
}
performance.timing = {};
Object.defineProperties(performance.timing, {
    navigationStart: {
        value: function () {
            return startTime;
        }
    }
})

Object.defineProperties(performance.timing.navigationStart, {
    toString: {
        value: function () {
            return startTime+'';
        }
    }
})
localStorage = window.localStorage;
let startTime = Date.now()
window.DocumentTimeline = function () {
    let res = {
        currentTime: function () {
            return Date.now() - startTime;
        }
    }
    Object.defineProperty(res.currentTime, 'toString', {
        value: function (){
            return (Date.now() - startTime)+''
        }
    })
    return res
}
window.URL.createObjectURL = function () {
    console.log('createObjectURL', arguments)

    return proxy({
        blob: arguments[0],

    }, 'uRL')
}
let metrics = ENV.fontsRes;
let textRandom = 1;

class TextMetrics {
    constructor(text, context, font) {
        this._text = text
        this._font = font
        this._context = context
        // this._TextMetrics = context.measureText(text)
        try {
            this._TextMetrics = metrics[this._font][this._text]
        } catch (e) {
            console.log('_TextMetrics', this._text, this._font)
            this._TextMetrics = {
                width: 180.55
            }
        }
    }

    get width() {
        let res = this._TextMetrics.width;
        if (res.toString().indexOf('.') !== -1) {
            res = res * textRandom;
        } else {
            res = parseInt(res * textRandom);
        }
        return res;
    }

    get actualBoundingBoxAscent() {
        let res = this._TextMetrics.actualBoundingBoxAscent;
        if (res.toString().indexOf('.') !== -1) {
            res = res * textRandom;
        } else {
            res = parseInt(res * textRandom);
        }
        return res;

    }

    get actualBoundingBoxDescent() {
        let res = this._TextMetrics.actualBoundingBoxDescent;
        if (res.toString().indexOf('.') !== -1) {
            res = res * textRandom;
        } else {
            res = parseInt(res * textRandom);
        }
        // console.log(this._TextMetrics.actualBoundingBoxDescent, res)
        return res;

    }

    get actualBoundingBoxLeft() {
        let res = this._TextMetrics.actualBoundingBoxLeft;
        if (res.toString().indexOf('.') !== -1) {
            res = res * textRandom;
        } else {
            res = parseInt(res * textRandom);
        }
        return res;

    }

    get actualBoundingBoxRight() {
        let res = this._TextMetrics.actualBoundingBoxRight;
        if (res.toString().indexOf('.') !== -1) {
            res = res * textRandom;
        } else {
            res = parseInt(res * textRandom);
        }
        return res;

    }
}

class OffscreenCanvasRenderingContext2D {

    imageDatas = {
        "18,90,1,1": [214, 122, 6, 255],
        "38,77,1,1": [255, 255, 255, 255],
        "48,28,1,1": [0, 0, 0, 0],
        "94,23,1,1": [0, 0, 0, 0],
        "26,46,1,1": [253, 243, 245, 255],
        "47,23,1,1": [0, 0, 0, 0],
        "37,17,1,1": [0, 0, 0, 255],
        "62,28,1,1": [204, 131, 217, 255]
    }
    imageData = ENV.imgsRes['94px sans-serif']

    constructor(w, h, context) {
        console.log('OffscreenCanvasRenderingContext2D.new', w, h)
        this.width = w;
        this.height = h;
        if (context) {
            this._context = context

        } else {
            this._context = Canvas.createCanvas(w, h).getContext('2d')

        }
    }

    set font(f) {
        console.log('OffscreenCanvasRenderingContext2D.font', f)
        this._font = f;
        this._context.font = f;
    }

    measureText(text) {
        console.log('OffscreenCanvasRenderingContext2D.measureText', text)
        this._text = text;
        window.fonts.push({
            font: this._font,
            text: text
        })
        let res = new TextMetrics(text, this._context, this._font);
        // return proxy(res, 'TextMetrics')
        return res;
    }

    get canvas() {
        console.log('CanvasRenderingContext2D22.canvas.get')
    }

    get globalAlpha() {
        console.log('CanvasRenderingContext2D22.globalAlpha.get')
    }

    set globalAlpha(args) {
        console.log('CanvasRenderingContext2D22.globalAlpha.set', args)
    }

    get globalCompositeOperation() {
        console.log('CanvasRenderingContext2D22.globalCompositeOperation.get')
        return this._globalCompositeOperation
    }

    set globalCompositeOperation(args) {
        console.log('CanvasRenderingContext2D22.globalCompositeOperation.set', args)
        this._globalCompositeOperation = args
    }

    get filter() {
        console.log('CanvasRenderingContext2D22.filter.get')
    }

    set filter(args) {
        console.log('CanvasRenderingContext2D22.filter.set', args)
    }

    get imageSmoothingEnabled() {
        console.log('CanvasRenderingContext2D22.imageSmoothingEnabled.get')
    }

    set imageSmoothingEnabled(args) {
        console.log('CanvasRenderingContext2D22.imageSmoothingEnabled.set', args)
    }

    get imageSmoothingQuality() {
        console.log('CanvasRenderingContext2D22.imageSmoothingQuality.get')
    }

    set imageSmoothingQuality(args) {
        console.log('CanvasRenderingContext2D22.imageSmoothingQuality.set', args)
    }

    get strokeStyle() {
        console.log('CanvasRenderingContext2D22.strokeStyle.get')
    }

    set strokeStyle(args) {
        console.log('CanvasRenderingContext2D22.strokeStyle.set', args)
        return this._context.strokeStyle = args
    }

    get fillStyle() {
        console.log('CanvasRenderingContext2D22.fillStyle.get')
    }

    set fillStyle(args) {
        console.log('CanvasRenderingContext2D22.fillStyle.set', args)
        this._context.canvas.fillStyle = args

    }

    get shadowOffsetX() {
        console.log('CanvasRenderingContext2D22.shadowOffsetX.get')
    }

    set shadowOffsetX(args) {
        console.log('CanvasRenderingContext2D22.shadowOffsetX.set', args)
        this._context.shadowOffsetX = args
    }

    get shadowOffsetY() {
        console.log('CanvasRenderingContext2D22.shadowOffsetY.get')
    }

    set shadowOffsetY(args) {
        console.log('CanvasRenderingContext2D22.shadowOffsetY.set', args)
        this._context.shadowOffsetY = args

    }

    get shadowBlur() {
        console.log('CanvasRenderingContext2D22.shadowBlur.get')
    }

    set shadowBlur(args) {
        console.log('CanvasRenderingContext2D22.shadowBlur.set', args)
        this._context.shadowBlur = args

    }

    get shadowColor() {
        console.log('CanvasRenderingContext2D22.shadowColor.get')

    }

    set shadowColor(args) {
        console.log('CanvasRenderingContext2D22.shadowColor.set', args)
        this._context.shadowColor = args

    }

    get lineWidth() {
        console.log('CanvasRenderingContext2D22.lineWidth.get')
    }

    set lineWidth(args) {
        console.log('CanvasRenderingContext2D22.lineWidth.set', args)
        this._context.lineWidth = args;
    }

    get lineCap() {
        console.log('CanvasRenderingContext2D22.lineCap.get')
    }

    set lineCap(args) {
        console.log('CanvasRenderingContext2D22.lineCap.set', args)
    }

    get lineJoin() {
        console.log('CanvasRenderingContext2D22.lineJoin.get')
    }

    set lineJoin(args) {
        console.log('CanvasRenderingContext2D22.lineJoin.set', args)
    }

    get miterLimit() {
        console.log('CanvasRenderingContext2D22.miterLimit.get')
    }

    set miterLimit(args) {
        console.log('CanvasRenderingContext2D22.miterLimit.set', args)
    }

    get lineDashOffset() {
        console.log('CanvasRenderingContext2D22.lineDashOffset.get')
    }

    set lineDashOffset(args) {
        console.log('CanvasRenderingContext2D22.lineDashOffset.set', args)
    }

    get font() {
        console.log('CanvasRenderingContext2D22.font.get')
        return this._context.font;
    }

    get textAlign() {
        console.log('CanvasRenderingContext2D22.textAlign.get')
    }

    set textAlign(args) {
        console.log('CanvasRenderingContext2D22.textAlign.set', args)
    }

    get textBaseline() {
        console.log('CanvasRenderingContext2D22.textBaseline.get')
        return this._context.textBaseline
    }

    set textBaseline(args) {
        console.log('CanvasRenderingContext2D22.textBaseline.set', args)
        this._context.textBaseline = args
    }

    get direction() {
        console.log('CanvasRenderingContext2D22.direction.get')
        return this._context.direction;
    }

    set direction(args) {
        console.log('CanvasRenderingContext2D22.direction.set', args)
        this._context.direction = args

    }

    get fontKerning() {
        console.log('CanvasRenderingContext2D22.fontKerning.get')
    }

    set fontKerning(args) {
        console.log('CanvasRenderingContext2D22.fontKerning.set', args)
    }

    get fontStretch() {
        console.log('CanvasRenderingContext2D22.fontStretch.get')
    }

    set fontStretch(args) {
        console.log('CanvasRenderingContext2D22.fontStretch.set', args)
    }

    get fontVariantCaps() {
        console.log('CanvasRenderingContext2D22.fontVariantCaps.get')
    }

    set fontVariantCaps(args) {
        console.log('CanvasRenderingContext2D22.fontVariantCaps.set', args)
    }

    get letterSpacing() {
        console.log('CanvasRenderingContext2D22.letterSpacing.get')
    }

    set letterSpacing(args) {
        console.log('CanvasRenderingContext2D22.letterSpacing.set', args)
    }

    get textRendering() {
        console.log('CanvasRenderingContext2D22.textRendering.get')
    }

    set textRendering(args) {
        console.log('CanvasRenderingContext2D22.textRendering.set', args)
    }

    get wordSpacing() {
        console.log('CanvasRenderingContext2D22.wordSpacing.get')
    }

    set wordSpacing(args) {
        console.log('CanvasRenderingContext2D22.wordSpacing.set', args)
    }

    clip() {
        console.log('CanvasRenderingContext2D22.clip')
    }

    createConicGradient() {
        console.log('CanvasRenderingContext2D22.createConicGradient')
    }

    createImageData(w,h) {
        console.log('CanvasRenderingContext2D22.createImageData')
        return new Uint8Array(w*h)
    }

    createLinearGradient() {
        console.log('CanvasRenderingContext2D22.createLinearGradient')

        return this._context.createLinearGradient(...arguments)
    }

    createPattern() {
        console.log('CanvasRenderingContext2D22.createPattern')
    }

    createRadialGradient() {
        console.log('CanvasRenderingContext2D22.createRadialGradient')
    }

    drawFocusIfNeeded() {
        console.log('CanvasRenderingContext2D22.drawFocusIfNeeded')
    }

    drawImage() {
        console.log('CanvasRenderingContext2D22.drawImage')
        this._context.drawImage(...arguments)
    }

    fill() {
        console.log('CanvasRenderingContext2D22.fill')
    }

    fillText() {
        console.log('CanvasRenderingContext2D22.fillText', ...arguments)
        this._context.fillText(...arguments)
        this._fillText = [arguments[0], arguments[1], arguments[2]]
    }

    getContextAttributes() {
        console.log('CanvasRenderingContext2D22.getContextAttributes')
    }

    getImageData() {
        let t = _random();

        let res = this._context.getImageData(...arguments)
        window.imageDatas.push({
            font: this._context.font,
            fillStyle: this._context.fillStyle,
            fillText: this._fillText,
            imageData: [arguments[0], arguments[1], arguments[2], arguments[3]]
        })
        let tdata = this.imageDatas[[arguments[0], arguments[1], arguments[2], arguments[3]] + ''];
        if (tdata) {
            res.data[0] = parseInt(tdata[0] * t)
            res.data[1] = parseInt(tdata[1] * t)
            res.data[2] = parseInt(tdata[2] * t)
            res.data[3] = parseInt(tdata[3] * t)
        }
        console.log('CanvasRenderingContext2D22.getImageData', ...arguments, res)

        return res
    }

    getLineDash() {
        console.log('CanvasRenderingContext2D22.getLineDash')
    }

    getTransform() {
        console.log('CanvasRenderingContext2D22.getTransform')
    }

    isContextLost() {
        console.log('CanvasRenderingContext2D22.isContextLost')
    }

    isPointInPath() {
        console.log('CanvasRenderingContext2D22.isPointInPath')
        return false;
    }

    isPointInStroke() {
        console.log('CanvasRenderingContext2D22.isPointInStroke')
    }

    putImageData() {
        console.log('CanvasRenderingContext2D22.putImageData')
    }

    reset() {
        console.log('CanvasRenderingContext2D22.reset')
    }

    roundRect() {
        console.log('CanvasRenderingContext2D22.roundRect')
    }

    save() {
        console.log('CanvasRenderingContext2D22.save')
    }

    scale() {
        console.log('CanvasRenderingContext2D22.scale')
    }

    setLineDash() {
        console.log('CanvasRenderingContext2D22.setLineDash')
    }

    setTransform() {
        console.log('CanvasRenderingContext2D22.setTransform')
    }

    stroke() {
        console.log('CanvasRenderingContext2D22.stroke')
        this._context.stroke()
    }

    strokeText() {
        console.log('CanvasRenderingContext2D22.strokeText')
    }

    transform() {
        console.log('CanvasRenderingContext2D22.transform')
    }

    translate() {
        console.log('CanvasRenderingContext2D22.translate')
    }

    arc() {
        console.log('CanvasRenderingContext2D22.arc')
        return this._context.arc(...arguments)
    }

    arcTo() {
        console.log('CanvasRenderingContext2D22.arcTo')
    }

    beginPath() {
        console.log('CanvasRenderingContext2D22.beginPath')
        return this._context.beginPath()
    }

    bezierCurveTo() {
        console.log('CanvasRenderingContext2D22.bezierCurveTo')
    }

    clearRect() {
        console.log('CanvasRenderingContext2D22.clearRect')
    }

    closePath() {
        console.log('CanvasRenderingContext2D22.closePath')
        return this._context.closePath(...arguments)

    }

    ellipse() {
        console.log('CanvasRenderingContext2D22.ellipse')
    }

    fillRect() {
        console.log('CanvasRenderingContext2D22.fillRect')
        return this._context.fillRect(...arguments)
    }

    lineTo() {
        console.log('CanvasRenderingContext2D22.lineTo')
        return this._context.lineTo(...arguments)

    }

    moveTo() {
        console.log('CanvasRenderingContext2D22.moveTo')
        return this._context.moveTo(...arguments)
    }

    quadraticCurveTo() {
        console.log('CanvasRenderingContext2D22.quadraticCurveTo')
    }

    rect() {
        console.log('CanvasRenderingContext2D22.rect')
    }

    resetTransform() {
        console.log('CanvasRenderingContext2D22.resetTransform')
    }

    restore() {
        console.log('CanvasRenderingContext2D22.restore')
    }

    rotate() {
        console.log('CanvasRenderingContext2D22.rotate')
    }

    strokeRect() {
        console.log('CanvasRenderingContext2D22.strokeRect')
    }


}

Object.defineProperties(OffscreenCanvasRenderingContext2D.prototype, {
    canvas: {enumerable: true},
    globalAlpha: {enumerable: true},
    globalCompositeOperation: {enumerable: true},
    filter: {enumerable: true},
    imageSmoothingEnabled: {enumerable: true},
    imageSmoothingQuality: {enumerable: true},
    strokeStyle: {enumerable: true},
    fillStyle: {enumerable: true},
    shadowOffsetX: {enumerable: true},
    shadowOffsetY: {enumerable: true},
    shadowBlur: {enumerable: true},
    shadowColor: {enumerable: true},
    lineWidth: {enumerable: true},
    lineCap: {enumerable: true},
    lineJoin: {enumerable: true},
    miterLimit: {enumerable: true},
    lineDashOffset: {enumerable: true},
    font: {enumerable: true},
    textAlign: {enumerable: true},
    textBaseline: {enumerable: true},
    direction: {enumerable: true},
    fontKerning: {enumerable: true},
    fontStretch: {enumerable: true},
    fontVariantCaps: {enumerable: true},
    letterSpacing: {enumerable: true},
    textRendering: {enumerable: true},
    wordSpacing: {enumerable: true},
    clip: {enumerable: true},
    createConicGradient: {enumerable: true},
    createImageData: {enumerable: true},
    createLinearGradient: {enumerable: true},
    createPattern: {enumerable: true},
    createRadialGradient: {enumerable: true},
    drawFocusIfNeeded: {enumerable: true},
    drawImage: {enumerable: true},
    fill: {enumerable: true},
    fillText: {enumerable: true},
    getContextAttributes: {enumerable: true},
    getImageData: {enumerable: true},
    getLineDash: {enumerable: true},
    getTransform: {enumerable: true},
    isContextLost: {enumerable: true},
    isPointInPath: {enumerable: true},
    isPointInStroke: {enumerable: true},
    measureText: {enumerable: true},
    putImageData: {enumerable: true},
    reset: {enumerable: true},
    roundRect: {enumerable: true},
    save: {enumerable: true},
    scale: {enumerable: true},
    setLineDash: {enumerable: true},
    setTransform: {enumerable: true},
    stroke: {enumerable: true},
    strokeText: {enumerable: true},
    transform: {enumerable: true},
    translate: {enumerable: true},
    arc: {enumerable: true},
    arcTo: {enumerable: true},
    beginPath: {enumerable: true},
    bezierCurveTo: {enumerable: true},
    clearRect: {enumerable: true},
    closePath: {enumerable: true},
    ellipse: {enumerable: true},
    fillRect: {enumerable: true},
    lineTo: {enumerable: true},
    moveTo: {enumerable: true},
    quadraticCurveTo: {enumerable: true},
    rect: {enumerable: true},
    resetTransform: {enumerable: true},
    restore: {enumerable: true},
    rotate: {enumerable: true},
    strokeRect: {enumerable: true},
    [Symbol.toStringTag]: {value: "CanvasRenderingContext2D", configurable: true}

})

var v_saf;
!function () {
    var n = Function.toString, t = [], i = [], o = [].indexOf.bind(t), e = [].push.bind(t), r = [].push.bind(i);

    function u(n, t, tag) {
        return -1 == o(n) && (e(n), r(`function ${tag ? tag : ""}${t || n.name || ""}() { [native code] }`.replaceAll('get get', 'get').replaceAll('set set', 'set'))), n
    }

    Object.defineProperty(Function.prototype, "toString", {
        enumerable: !1,
        configurable: !0,
        writable: !0,
        value: function () {
            return "function" == typeof this && i[o(this)] || n.call(this)
        }
    }), u(Function.prototype.toString, "toString"), v_saf = u
}();
let r = {}
Object.keys(Object.getOwnPropertyDescriptors(OffscreenCanvasRenderingContext2D.prototype)).forEach(e => {
    r[e] = {}
    if (Object.getOwnPropertyDescriptor(OffscreenCanvasRenderingContext2D.prototype, e)['value']) {
        r[e]['value'] = v_saf(Object.getOwnPropertyDescriptor(OffscreenCanvasRenderingContext2D.prototype, e)['value'])
    }

    if (Object.getOwnPropertyDescriptor(OffscreenCanvasRenderingContext2D.prototype, e)['get']) {
        r[e]['get'] = v_saf(Object.getOwnPropertyDescriptor(OffscreenCanvasRenderingContext2D.prototype, e)['get'], undefined, 'get ')
    }
    if (Object.getOwnPropertyDescriptor(OffscreenCanvasRenderingContext2D.prototype, e)['set']) {
        r[e]['set'] = v_saf(Object.getOwnPropertyDescriptor(OffscreenCanvasRenderingContext2D.prototype, e)['set'], undefined, 'set ')
    }
    r[e]['enumerable'] = true
})
Object.defineProperties(OffscreenCanvasRenderingContext2D.prototype, r)

window.OffscreenCanvasRenderingContext2D = OffscreenCanvasRenderingContext2D
window.CanvasRenderingContext2D = OffscreenCanvasRenderingContext2D

function randInt(min, max) {
    return Math.round(Math.random() * (max - min) + min)
}

var addit = randInt(1500, 10000)
window.requestAnimationFrame = function requestAnimationFrame(cb) {
    addit += randInt(20, 100);
    cb(Date.now() - initTime + addit + parseFloat(Math.random().toFixed(2)))
}
window.cancelAnimationFrame = function cancelAnimationFrame() {
}


window.fetch = function (url, options) {
    // console.log('fetch', url, options)
    _console(options.body)
    process.argv[2] && fss.writeFileSync(process.argv[2], options.body)
    process.exit(0)
    // console.log(JSON.stringify(window.fonts))
}

var WebGLRenderingContext = class WebGLRenderingContext {
    constructor(aaa) {
        console.log('new WebGLRenderingContext', aaa)
    }

    createBuffer() {
        v_console_log('  [*] WebGLRenderingContext -> createBuffer[func]');
        return v_new(WebGLBuffer)
    }

    bindBuffer(target, buffer) {
        v_console_log('  [*] WebGLRenderingContext -> bindBuffer[func]', target, buffer);
        return v_new(WebGLBuffer)
    }

    getAttribLocation(program, name) {
        v_console_log('  [*] WebGLRenderingContext -> getAttribLocation[func]', program, name);
        switch (name) {
            case 'aPosition':
                return 0;
            case 'aColor':
                return 1;
        }
    }

    vertexAttribPointer(index, size, type, normalized, stride, offset) {
        v_console_log('  [*] WebGLRenderingContext -> vertexAttribPointer[func]', index, size, type, normalized, stride, offset);
    }

    enableVertexAttribArray(index) {
        v_console_log('  [*] WebGLRenderingContext -> enableVertexAttribArray[func]', index);
    }

    useProgram(index) {
        v_console_log('  [*] WebGLRenderingContext -> useProgram[func]', index);
    }

    getUniformLocation(program, name) {
        v_console_log('  [*] WebGLRenderingContext -> getUniformLocation[func]', program, name);
        return proxy({}, 'getUniformLocation')
    }

    uniform4fv(program, name) {
        v_console_log('  [*] WebGLRenderingContext -> uniform4fv[func]', program, name);
    }

    drawArrays(mode, first, count) {
        v_console_log('  [*] WebGLRenderingContext -> drawArrays[func]', mode, first, count);
    }

    readPixels(x, y, width, height, format, type, pixels) {
        // for (let i = 0; i < pixels.length - 1; i++) {
        //     pixels.fill(parseInt(Math.random() * 210 + 10), i, i + 1)
        // }
        v_console_log('  [*] WebGLRenderingContext -> readPixels[func]', x, y, width, height, format, type, pixels)
    }

    bufferData(target, size, srcData, usage, srcOffSet, length) {
        v_console_log('  [*] WebGLRenderingContext -> bufferData[func]', target, size, srcData, usage, srcOffSet, length);
        return v_new(WebGLBuffer)
    }

    createProgram() {
        v_console_log('  [*] WebGLRenderingContext -> createProgram[func]');
        return v_new(WebGLProgram)
    }

    createShader(a) {
        v_console_log('  [*] WebGLRenderingContext -> createShader[func]', a);
        return v_new(WebGLShader)
    }

    shaderSource(shader, originalSource) {
        v_console_log('  [*] WebGLRenderingContext -> shaderSource[func]', shader, originalSource);
        this._originalSource = originalSource;
    }

    compileShader(shader) {
        v_console_log('  [*] WebGLRenderingContext -> compileShader[func]', shader);
        // this._originalSource = originalSource;
    }

    getShaderParameter(shader, pname) {
        v_console_log('  [*] WebGLRenderingContext -> getShaderParameter[func]', shader, pname);
        switch (pname) {
            case 35713:
                return true;
                break;
        }
    }

    attachShader(program, shader) {
        v_console_log('  [*] WebGLRenderingContext -> attachShader[func]', program, shader);

    }

    linkProgram(program, shader) {
        v_console_log('  [*] WebGLRenderingContext -> linkProgram[func]', program, shader);

    }

    getProgramParameter(program, pname) {
        v_console_log('  [*] WebGLRenderingContext -> getProgramParameter[func]', program, pname);
        if (pname === 35714) {
            return true;
        }

    }

    getSupportedExtensions() {
        // window.debug = true;
        v_console_log('  [*] WebGLRenderingContext -> getSupportedExtensions[func]')
        return [
            "ANGLE_instanced_arrays", "EXT_blend_minmax", "EXT_color_buffer_half_float", "EXT_disjoint_timer_query", "EXT_float_blend", "EXT_frag_depth",
            "EXT_shader_texture_lod", "EXT_texture_compression_bptc", "EXT_texture_compression_rgtc", "EXT_texture_filter_anisotropic", "WEBKIT_EXT_texture_filter_anisotropic", "EXT_sRGB",
            "KHR_parallel_shader_compile", "OES_element_index_uint", "OES_fbo_render_mipmap", "OES_standard_derivatives", "OES_texture_float", "OES_texture_float_linear",
            "OES_texture_half_float", "OES_texture_half_float_linear", "OES_vertex_array_object", "WEBGL_color_buffer_float", "WEBGL_compressed_texture_s3tc",
            "WEBKIT_WEBGL_compressed_texture_s3tc", "WEBGL_compressed_texture_s3tc_srgb", "WEBGL_debug_renderer_info", "WEBGL_debug_shaders",
            "WEBGL_depth_texture", "WEBKIT_WEBGL_depth_texture", "WEBGL_draw_buffers", "WEBGL_lose_context", "WEBKIT_WEBGL_lose_context", "WEBGL_multi_draw",
        ]
    }

    getExtension(key) {
        v_console_log('  [*] WebGLRenderingContext -> getExtension[func]:', key)

        class WebGLDebugRendererInfo {
            get UNMASKED_VENDOR_WEBGL() {
                return 37445
            }

            get UNMASKED_RENDERER_WEBGL() {
                return 37446
            }
        }

        class EXTTextureFilterAnisotropic {
        }

        class WebGLLoseContext {
            loseContext() {
            }

            restoreContext() {
            }
        }

        if (key == 'WEBGL_debug_renderer_info') {
            var r = new WebGLDebugRendererInfo
        }
        if (key == 'EXT_texture_filter_anisotropic') {
            var r = new EXTTextureFilterAnisotropic
        }
        if (key == 'WEBGL_lose_context') {
            var r = new WebGLLoseContext
        } else {
            var r = new WebGLDebugRendererInfo
        }
        return proxy(r, 'new ' + key)
    }

    getParameter(key) {
        v_console_log('  [*] WebGLRenderingContext -> getParameter[func]:', key)
        let res;
        let _toggle = {
            3413: 8,
            3412: 8,
            3411: 8,
            3410: 8,
            3414: 24,
            35661: 32,
            34076: 16384,
            36349: 1024,
            34024: 16384,
            34930: 16,
            3379: 16384,
            36348: 31,
            34921: 16,
            35660: 16,
            36347: 1024,
            7937: 'WebKit WebGL',
            35724: 'WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)',
            3415: 0,
            7936: 'WebKit',
            7938: 'WebGL 1.0 (OpenGL ES 2.0 Chromium)',
            37445: 'Google Inc.',
            // 37446: 'ANGLE (Apple, Apple M1 Max, OpenGL 4.1)',
            37446: window.GRAPHIC_DRIVER,
            34047: null
        }
        if (_toggle[key]) {
            res = _toggle[key]

        } else {
            if (key == 33902) {
                return new Float32Array([1, 1])
            }
            if (key == 33901) {
                return new Float32Array([1, 64])
            }
            if (key == 35661) {
                return 32
            }
            if (key == 34047) {
                return null
            }
            if (key == 34076) {
                return 16384
            }
            if (key == 36349) {
                return 1024
            }
            if (key == 34024) {
                return 16384
            }
            if (key == 34930) {
                return 16
            }
            if (key == 3379) {
                return 16384
            }
            if (key == 36348) {
                return 30
            }
            if (key == 34921) {
                return 16
            }
            if (key == 35660) {
                return 16
            }
            if (key == 36347) {
                return 4095
            }
            if (key == 3386) {
                return new Int32Array([16384, 16384])
            }
            if (key == 3410) {
                return 8
            }
            if (key == 7937) {
                return "WebKit WebGL"
            }
            if (key == 35724) {
                return "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)"
            }
            if (key == 3415) {
                return 0
            }
            if (key == 7936) {
                return "WebKit"
            }
            if (key == 7938) {
                return "WebGL 1.0 (OpenGL ES 2.0 Chromium)"
            }
            if (key == 3411) {
                return 8
            }
            if (key == 3412) {
                return 8
            }
            if (key == 3413) {
                return 8
            }
            if (key == 3414) {
                return 24
            }
        }
        v_console_log('  [*] WebGLRenderingContext -> getParameter[func]:', key, res)

        return res;
    }

    getContextAttributes() {
        v_console_log('  [*] WebGLRenderingContext -> getContextAttributes[func]')
        return {
            alpha: true,
            antialias: true,
            depth: true,
            desynchronized: false,
            failIfMajorPerformanceCaveat: false,
            powerPreference: "default",
            premultipliedAlpha: true,
            preserveDrawingBuffer: false,
            stencil: false,
            xrCompatible: false,
        }
    }

    getShaderPrecisionFormat(a, b) {
        v_console_log('  [*] WebGLRenderingContext -> getShaderPrecisionFormat[func]', a, b)

        function WebGLShaderPrecisionFormat() {
        }

        var r1 = v_new(WebGLShaderPrecisionFormat)
        r1.rangeMin = 127
        r1.rangeMax = 127
        r1.precision = 23
        var r2 = v_new(WebGLShaderPrecisionFormat)
        r2.rangeMin = 31
        r2.rangeMax = 30
        r2.precision = 0
        if (a == 35633 && b == 36338) {
            return r1
        }
        if (a == 35633 && b == 36337) {
            return r1
        }
        if (a == 35633 && b == 36336) {
            return r1
        }
        if (a == 35633 && b == 36341) {
            return r2
        }
        if (a == 35633 && b == 36340) {
            return r2
        }
        if (a == 35633 && b == 36339) {
            return r2
        }
        if (a == 35632 && b == 36338) {
            return r1
        }
        if (a == 35632 && b == 36337) {
            return r1
        }
        if (a == 35632 && b == 36336) {
            return r1
        }
        if (a == 35632 && b == 36341) {
            return r2
        }
        if (a == 35632 && b == 36340) {
            return r2
        }
        if (a == 35632 && b == 36339) {
            return r2
        }
        throw Error('getShaderPrecisionFormat')
    }
}
Object.defineProperties(WebGLRenderingContext.prototype, {
    canvas: {writable: undefined, enumerable: true, configurable: true},
    drawingBufferWidth: {writable: undefined, enumerable: true, configurable: true},
    drawingBufferHeight: {writable: undefined, enumerable: true, configurable: true},
    drawingBufferColorSpace: {writable: undefined, enumerable: true, configurable: true},
    unpackColorSpace: {writable: undefined, enumerable: true, configurable: true},
    DEPTH_BUFFER_BIT: {value: 256, writable: false, enumerable: true, configurable: false},
    STENCIL_BUFFER_BIT: {value: 1024, writable: false, enumerable: true, configurable: false},
    COLOR_BUFFER_BIT: {value: 16384, writable: false, enumerable: true, configurable: false},
    POINTS: {writable: false, enumerable: true, configurable: false},
    LINES: {value: 1, writable: false, enumerable: true, configurable: false},
    LINE_LOOP: {value: 2, writable: false, enumerable: true, configurable: false},
    LINE_STRIP: {value: 3, writable: false, enumerable: true, configurable: false},
    TRIANGLES: {value: 4, writable: false, enumerable: true, configurable: false},
    TRIANGLE_STRIP: {value: 5, writable: false, enumerable: true, configurable: false},
    TRIANGLE_FAN: {value: 6, writable: false, enumerable: true, configurable: false},
    ZERO: {writable: false, enumerable: true, configurable: false},
    ONE: {value: 1, writable: false, enumerable: true, configurable: false},
    SRC_COLOR: {value: 768, writable: false, enumerable: true, configurable: false},
    ONE_MINUS_SRC_COLOR: {value: 769, writable: false, enumerable: true, configurable: false},
    SRC_ALPHA: {value: 770, writable: false, enumerable: true, configurable: false},
    ONE_MINUS_SRC_ALPHA: {value: 771, writable: false, enumerable: true, configurable: false},
    DST_ALPHA: {value: 772, writable: false, enumerable: true, configurable: false},
    ONE_MINUS_DST_ALPHA: {value: 773, writable: false, enumerable: true, configurable: false},
    DST_COLOR: {value: 774, writable: false, enumerable: true, configurable: false},
    ONE_MINUS_DST_COLOR: {value: 775, writable: false, enumerable: true, configurable: false},
    SRC_ALPHA_SATURATE: {value: 776, writable: false, enumerable: true, configurable: false},
    FUNC_ADD: {value: 32774, writable: false, enumerable: true, configurable: false},
    BLEND_EQUATION: {value: 32777, writable: false, enumerable: true, configurable: false},
    BLEND_EQUATION_RGB: {value: 32777, writable: false, enumerable: true, configurable: false},
    BLEND_EQUATION_ALPHA: {value: 34877, writable: false, enumerable: true, configurable: false},
    FUNC_SUBTRACT: {value: 32778, writable: false, enumerable: true, configurable: false},
    FUNC_REVERSE_SUBTRACT: {value: 32779, writable: false, enumerable: true, configurable: false},
    BLEND_DST_RGB: {value: 32968, writable: false, enumerable: true, configurable: false},
    BLEND_SRC_RGB: {value: 32969, writable: false, enumerable: true, configurable: false},
    BLEND_DST_ALPHA: {value: 32970, writable: false, enumerable: true, configurable: false},
    BLEND_SRC_ALPHA: {value: 32971, writable: false, enumerable: true, configurable: false},
    CONSTANT_COLOR: {value: 32769, writable: false, enumerable: true, configurable: false},
    ONE_MINUS_CONSTANT_COLOR: {value: 32770, writable: false, enumerable: true, configurable: false},
    CONSTANT_ALPHA: {value: 32771, writable: false, enumerable: true, configurable: false},
    ONE_MINUS_CONSTANT_ALPHA: {value: 32772, writable: false, enumerable: true, configurable: false},
    BLEND_COLOR: {value: 32773, writable: false, enumerable: true, configurable: false},
    ARRAY_BUFFER: {value: 34962, writable: false, enumerable: true, configurable: false},
    ELEMENT_ARRAY_BUFFER: {value: 34963, writable: false, enumerable: true, configurable: false},
    ARRAY_BUFFER_BINDING: {value: 34964, writable: false, enumerable: true, configurable: false},
    ELEMENT_ARRAY_BUFFER_BINDING: {value: 34965, writable: false, enumerable: true, configurable: false},
    STREAM_DRAW: {value: 35040, writable: false, enumerable: true, configurable: false},
    STATIC_DRAW: {value: 35044, writable: false, enumerable: true, configurable: false},
    DYNAMIC_DRAW: {value: 35048, writable: false, enumerable: true, configurable: false},
    BUFFER_SIZE: {value: 34660, writable: false, enumerable: true, configurable: false},
    BUFFER_USAGE: {value: 34661, writable: false, enumerable: true, configurable: false},
    CURRENT_VERTEX_ATTRIB: {value: 34342, writable: false, enumerable: true, configurable: false},
    FRONT: {value: 1028, writable: false, enumerable: true, configurable: false},
    BACK: {value: 1029, writable: false, enumerable: true, configurable: false},
    FRONT_AND_BACK: {value: 1032, writable: false, enumerable: true, configurable: false},
    TEXTURE_2D: {value: 3553, writable: false, enumerable: true, configurable: false},
    CULL_FACE: {value: 2884, writable: false, enumerable: true, configurable: false},
    BLEND: {value: 3042, writable: false, enumerable: true, configurable: false},
    DITHER: {value: 3024, writable: false, enumerable: true, configurable: false},
    STENCIL_TEST: {value: 2960, writable: false, enumerable: true, configurable: false},
    DEPTH_TEST: {value: 2929, writable: false, enumerable: true, configurable: false},
    SCISSOR_TEST: {value: 3089, writable: false, enumerable: true, configurable: false},
    POLYGON_OFFSET_FILL: {value: 32823, writable: false, enumerable: true, configurable: false},
    SAMPLE_ALPHA_TO_COVERAGE: {value: 32926, writable: false, enumerable: true, configurable: false},
    SAMPLE_COVERAGE: {value: 32928, writable: false, enumerable: true, configurable: false},
    NO_ERROR: {writable: false, enumerable: true, configurable: false},
    INVALID_ENUM: {value: 1280, writable: false, enumerable: true, configurable: false},
    INVALID_VALUE: {value: 1281, writable: false, enumerable: true, configurable: false},
    INVALID_OPERATION: {value: 1282, writable: false, enumerable: true, configurable: false},
    OUT_OF_MEMORY: {value: 1285, writable: false, enumerable: true, configurable: false},
    CW: {value: 2304, writable: false, enumerable: true, configurable: false},
    CCW: {value: 2305, writable: false, enumerable: true, configurable: false},
    LINE_WIDTH: {value: 2849, writable: false, enumerable: true, configurable: false},
    ALIASED_POINT_SIZE_RANGE: {value: 33901, writable: false, enumerable: true, configurable: false},
    ALIASED_LINE_WIDTH_RANGE: {value: 33902, writable: false, enumerable: true, configurable: false},
    CULL_FACE_MODE: {value: 2885, writable: false, enumerable: true, configurable: false},
    FRONT_FACE: {value: 2886, writable: false, enumerable: true, configurable: false},
    DEPTH_RANGE: {value: 2928, writable: false, enumerable: true, configurable: false},
    DEPTH_WRITEMASK: {value: 2930, writable: false, enumerable: true, configurable: false},
    DEPTH_CLEAR_VALUE: {value: 2931, writable: false, enumerable: true, configurable: false},
    DEPTH_FUNC: {value: 2932, writable: false, enumerable: true, configurable: false},
    STENCIL_CLEAR_VALUE: {value: 2961, writable: false, enumerable: true, configurable: false},
    STENCIL_FUNC: {value: 2962, writable: false, enumerable: true, configurable: false},
    STENCIL_FAIL: {value: 2964, writable: false, enumerable: true, configurable: false},
    STENCIL_PASS_DEPTH_FAIL: {value: 2965, writable: false, enumerable: true, configurable: false},
    STENCIL_PASS_DEPTH_PASS: {value: 2966, writable: false, enumerable: true, configurable: false},
    STENCIL_REF: {value: 2967, writable: false, enumerable: true, configurable: false},
    STENCIL_VALUE_MASK: {value: 2963, writable: false, enumerable: true, configurable: false},
    STENCIL_WRITEMASK: {value: 2968, writable: false, enumerable: true, configurable: false},
    STENCIL_BACK_FUNC: {value: 34816, writable: false, enumerable: true, configurable: false},
    STENCIL_BACK_FAIL: {value: 34817, writable: false, enumerable: true, configurable: false},
    STENCIL_BACK_PASS_DEPTH_FAIL: {value: 34818, writable: false, enumerable: true, configurable: false},
    STENCIL_BACK_PASS_DEPTH_PASS: {value: 34819, writable: false, enumerable: true, configurable: false},
    STENCIL_BACK_REF: {value: 36003, writable: false, enumerable: true, configurable: false},
    STENCIL_BACK_VALUE_MASK: {value: 36004, writable: false, enumerable: true, configurable: false},
    STENCIL_BACK_WRITEMASK: {value: 36005, writable: false, enumerable: true, configurable: false},
    VIEWPORT: {value: 2978, writable: false, enumerable: true, configurable: false},
    SCISSOR_BOX: {value: 3088, writable: false, enumerable: true, configurable: false},
    COLOR_CLEAR_VALUE: {value: 3106, writable: false, enumerable: true, configurable: false},
    COLOR_WRITEMASK: {value: 3107, writable: false, enumerable: true, configurable: false},
    UNPACK_ALIGNMENT: {value: 3317, writable: false, enumerable: true, configurable: false},
    PACK_ALIGNMENT: {value: 3333, writable: false, enumerable: true, configurable: false},
    MAX_TEXTURE_SIZE: {value: 3379, writable: false, enumerable: true, configurable: false},
    MAX_VIEWPORT_DIMS: {value: 3386, writable: false, enumerable: true, configurable: false},
    SUBPIXEL_BITS: {value: 3408, writable: false, enumerable: true, configurable: false},
    RED_BITS: {value: 3410, writable: false, enumerable: true, configurable: false},
    GREEN_BITS: {value: 3411, writable: false, enumerable: true, configurable: false},
    BLUE_BITS: {value: 3412, writable: false, enumerable: true, configurable: false},
    ALPHA_BITS: {value: 3413, writable: false, enumerable: true, configurable: false},
    DEPTH_BITS: {value: 3414, writable: false, enumerable: true, configurable: false},
    STENCIL_BITS: {value: 3415, writable: false, enumerable: true, configurable: false},
    POLYGON_OFFSET_UNITS: {value: 10752, writable: false, enumerable: true, configurable: false},
    POLYGON_OFFSET_FACTOR: {value: 32824, writable: false, enumerable: true, configurable: false},
    TEXTURE_BINDING_2D: {value: 32873, writable: false, enumerable: true, configurable: false},
    SAMPLE_BUFFERS: {value: 32936, writable: false, enumerable: true, configurable: false},
    SAMPLES: {value: 32937, writable: false, enumerable: true, configurable: false},
    SAMPLE_COVERAGE_VALUE: {value: 32938, writable: false, enumerable: true, configurable: false},
    SAMPLE_COVERAGE_INVERT: {value: 32939, writable: false, enumerable: true, configurable: false},
    COMPRESSED_TEXTURE_FORMATS: {value: 34467, writable: false, enumerable: true, configurable: false},
    DONT_CARE: {value: 4352, writable: false, enumerable: true, configurable: false},
    FASTEST: {value: 4353, writable: false, enumerable: true, configurable: false},
    NICEST: {value: 4354, writable: false, enumerable: true, configurable: false},
    GENERATE_MIPMAP_HINT: {value: 33170, writable: false, enumerable: true, configurable: false},
    BYTE: {value: 5120, writable: false, enumerable: true, configurable: false},
    UNSIGNED_BYTE: {value: 5121, writable: false, enumerable: true, configurable: false},
    SHORT: {value: 5122, writable: false, enumerable: true, configurable: false},
    UNSIGNED_SHORT: {value: 5123, writable: false, enumerable: true, configurable: false},
    INT: {value: 5124, writable: false, enumerable: true, configurable: false},
    UNSIGNED_INT: {value: 5125, writable: false, enumerable: true, configurable: false},
    FLOAT: {value: 5126, writable: false, enumerable: true, configurable: false},
    DEPTH_COMPONENT: {value: 6402, writable: false, enumerable: true, configurable: false},
    ALPHA: {value: 6406, writable: false, enumerable: true, configurable: false},
    RGB: {value: 6407, writable: false, enumerable: true, configurable: false},
    RGBA: {value: 6408, writable: false, enumerable: true, configurable: false},
    LUMINANCE: {value: 6409, writable: false, enumerable: true, configurable: false},
    LUMINANCE_ALPHA: {value: 6410, writable: false, enumerable: true, configurable: false},
    UNSIGNED_SHORT_4_4_4_4: {value: 32819, writable: false, enumerable: true, configurable: false},
    UNSIGNED_SHORT_5_5_5_1: {value: 32820, writable: false, enumerable: true, configurable: false},
    UNSIGNED_SHORT_5_6_5: {value: 33635, writable: false, enumerable: true, configurable: false},
    FRAGMENT_SHADER: {value: 35632, writable: false, enumerable: true, configurable: false},
    VERTEX_SHADER: {value: 35633, writable: false, enumerable: true, configurable: false},
    MAX_VERTEX_ATTRIBS: {value: 34921, writable: false, enumerable: true, configurable: false},
    MAX_VERTEX_UNIFORM_VECTORS: {value: 36347, writable: false, enumerable: true, configurable: false},
    MAX_VARYING_VECTORS: {value: 36348, writable: false, enumerable: true, configurable: false},
    MAX_COMBINED_TEXTURE_IMAGE_UNITS: {value: 35661, writable: false, enumerable: true, configurable: false},
    MAX_VERTEX_TEXTURE_IMAGE_UNITS: {value: 35660, writable: false, enumerable: true, configurable: false},
    MAX_TEXTURE_IMAGE_UNITS: {value: 34930, writable: false, enumerable: true, configurable: false},
    MAX_FRAGMENT_UNIFORM_VECTORS: {value: 36349, writable: false, enumerable: true, configurable: false},
    SHADER_TYPE: {value: 35663, writable: false, enumerable: true, configurable: false},
    DELETE_STATUS: {value: 35712, writable: false, enumerable: true, configurable: false},
    LINK_STATUS: {value: 35714, writable: false, enumerable: true, configurable: false},
    VALIDATE_STATUS: {value: 35715, writable: false, enumerable: true, configurable: false},
    ATTACHED_SHADERS: {value: 35717, writable: false, enumerable: true, configurable: false},
    ACTIVE_UNIFORMS: {value: 35718, writable: false, enumerable: true, configurable: false},
    ACTIVE_ATTRIBUTES: {value: 35721, writable: false, enumerable: true, configurable: false},
    SHADING_LANGUAGE_VERSION: {value: 35724, writable: false, enumerable: true, configurable: false},
    CURRENT_PROGRAM: {value: 35725, writable: false, enumerable: true, configurable: false},
    NEVER: {value: 512, writable: false, enumerable: true, configurable: false},
    LESS: {value: 513, writable: false, enumerable: true, configurable: false},
    EQUAL: {value: 514, writable: false, enumerable: true, configurable: false},
    LEQUAL: {value: 515, writable: false, enumerable: true, configurable: false},
    GREATER: {value: 516, writable: false, enumerable: true, configurable: false},
    NOTEQUAL: {value: 517, writable: false, enumerable: true, configurable: false},
    GEQUAL: {value: 518, writable: false, enumerable: true, configurable: false},
    ALWAYS: {value: 519, writable: false, enumerable: true, configurable: false},
    KEEP: {value: 7680, writable: false, enumerable: true, configurable: false},
    REPLACE: {value: 7681, writable: false, enumerable: true, configurable: false},
    INCR: {value: 7682, writable: false, enumerable: true, configurable: false},
    DECR: {value: 7683, writable: false, enumerable: true, configurable: false},
    INVERT: {value: 5386, writable: false, enumerable: true, configurable: false},
    INCR_WRAP: {value: 34055, writable: false, enumerable: true, configurable: false},
    DECR_WRAP: {value: 34056, writable: false, enumerable: true, configurable: false},
    VENDOR: {value: 7936, writable: false, enumerable: true, configurable: false},
    RENDERER: {value: 7937, writable: false, enumerable: true, configurable: false},
    VERSION: {value: 7938, writable: false, enumerable: true, configurable: false},
    NEAREST: {value: 9728, writable: false, enumerable: true, configurable: false},
    LINEAR: {value: 9729, writable: false, enumerable: true, configurable: false},
    NEAREST_MIPMAP_NEAREST: {value: 9984, writable: false, enumerable: true, configurable: false},
    LINEAR_MIPMAP_NEAREST: {value: 9985, writable: false, enumerable: true, configurable: false},
    NEAREST_MIPMAP_LINEAR: {value: 9986, writable: false, enumerable: true, configurable: false},
    LINEAR_MIPMAP_LINEAR: {value: 9987, writable: false, enumerable: true, configurable: false},
    TEXTURE_MAG_FILTER: {value: 10240, writable: false, enumerable: true, configurable: false},
    TEXTURE_MIN_FILTER: {value: 10241, writable: false, enumerable: true, configurable: false},
    TEXTURE_WRAP_S: {value: 10242, writable: false, enumerable: true, configurable: false},
    TEXTURE_WRAP_T: {value: 10243, writable: false, enumerable: true, configurable: false},
    TEXTURE: {value: 5890, writable: false, enumerable: true, configurable: false},
    TEXTURE_CUBE_MAP: {value: 34067, writable: false, enumerable: true, configurable: false},
    TEXTURE_BINDING_CUBE_MAP: {value: 34068, writable: false, enumerable: true, configurable: false},
    TEXTURE_CUBE_MAP_POSITIVE_X: {value: 34069, writable: false, enumerable: true, configurable: false},
    TEXTURE_CUBE_MAP_NEGATIVE_X: {value: 34070, writable: false, enumerable: true, configurable: false},
    TEXTURE_CUBE_MAP_POSITIVE_Y: {value: 34071, writable: false, enumerable: true, configurable: false},
    TEXTURE_CUBE_MAP_NEGATIVE_Y: {value: 34072, writable: false, enumerable: true, configurable: false},
    TEXTURE_CUBE_MAP_POSITIVE_Z: {value: 34073, writable: false, enumerable: true, configurable: false},
    TEXTURE_CUBE_MAP_NEGATIVE_Z: {value: 34074, writable: false, enumerable: true, configurable: false},
    MAX_CUBE_MAP_TEXTURE_SIZE: {value: 34076, writable: false, enumerable: true, configurable: false},
    TEXTURE0: {value: 33984, writable: false, enumerable: true, configurable: false},
    TEXTURE1: {value: 33985, writable: false, enumerable: true, configurable: false},
    TEXTURE2: {value: 33986, writable: false, enumerable: true, configurable: false},
    TEXTURE3: {value: 33987, writable: false, enumerable: true, configurable: false},
    TEXTURE4: {value: 33988, writable: false, enumerable: true, configurable: false},
    TEXTURE5: {value: 33989, writable: false, enumerable: true, configurable: false},
    TEXTURE6: {value: 33990, writable: false, enumerable: true, configurable: false},
    TEXTURE7: {value: 33991, writable: false, enumerable: true, configurable: false},
    TEXTURE8: {value: 33992, writable: false, enumerable: true, configurable: false},
    TEXTURE9: {value: 33993, writable: false, enumerable: true, configurable: false},
    TEXTURE10: {value: 33994, writable: false, enumerable: true, configurable: false},
    TEXTURE11: {value: 33995, writable: false, enumerable: true, configurable: false},
    TEXTURE12: {value: 33996, writable: false, enumerable: true, configurable: false},
    TEXTURE13: {value: 33997, writable: false, enumerable: true, configurable: false},
    TEXTURE14: {value: 33998, writable: false, enumerable: true, configurable: false},
    TEXTURE15: {value: 33999, writable: false, enumerable: true, configurable: false},
    TEXTURE16: {value: 34000, writable: false, enumerable: true, configurable: false},
    TEXTURE17: {value: 34001, writable: false, enumerable: true, configurable: false},
    TEXTURE18: {value: 34002, writable: false, enumerable: true, configurable: false},
    TEXTURE19: {value: 34003, writable: false, enumerable: true, configurable: false},
    TEXTURE20: {value: 34004, writable: false, enumerable: true, configurable: false},
    TEXTURE21: {value: 34005, writable: false, enumerable: true, configurable: false},
    TEXTURE22: {value: 34006, writable: false, enumerable: true, configurable: false},
    TEXTURE23: {value: 34007, writable: false, enumerable: true, configurable: false},
    TEXTURE24: {value: 34008, writable: false, enumerable: true, configurable: false},
    TEXTURE25: {value: 34009, writable: false, enumerable: true, configurable: false},
    TEXTURE26: {value: 34010, writable: false, enumerable: true, configurable: false},
    TEXTURE27: {value: 34011, writable: false, enumerable: true, configurable: false},
    TEXTURE28: {value: 34012, writable: false, enumerable: true, configurable: false},
    TEXTURE29: {value: 34013, writable: false, enumerable: true, configurable: false},
    TEXTURE30: {value: 34014, writable: false, enumerable: true, configurable: false},
    TEXTURE31: {value: 34015, writable: false, enumerable: true, configurable: false},
    ACTIVE_TEXTURE: {value: 34016, writable: false, enumerable: true, configurable: false},
    REPEAT: {value: 10497, writable: false, enumerable: true, configurable: false},
    CLAMP_TO_EDGE: {value: 33071, writable: false, enumerable: true, configurable: false},
    MIRRORED_REPEAT: {value: 33648, writable: false, enumerable: true, configurable: false},
    FLOAT_VEC2: {value: 35664, writable: false, enumerable: true, configurable: false},
    FLOAT_VEC3: {value: 35665, writable: false, enumerable: true, configurable: false},
    FLOAT_VEC4: {value: 35666, writable: false, enumerable: true, configurable: false},
    INT_VEC2: {value: 35667, writable: false, enumerable: true, configurable: false},
    INT_VEC3: {value: 35668, writable: false, enumerable: true, configurable: false},
    INT_VEC4: {value: 35669, writable: false, enumerable: true, configurable: false},
    BOOL: {value: 35670, writable: false, enumerable: true, configurable: false},
    BOOL_VEC2: {value: 35671, writable: false, enumerable: true, configurable: false},
    BOOL_VEC3: {value: 35672, writable: false, enumerable: true, configurable: false},
    BOOL_VEC4: {value: 35673, writable: false, enumerable: true, configurable: false},
    FLOAT_MAT2: {value: 35674, writable: false, enumerable: true, configurable: false},
    FLOAT_MAT3: {value: 35675, writable: false, enumerable: true, configurable: false},
    FLOAT_MAT4: {value: 35676, writable: false, enumerable: true, configurable: false},
    SAMPLER_2D: {value: 35678, writable: false, enumerable: true, configurable: false},
    SAMPLER_CUBE: {value: 35680, writable: false, enumerable: true, configurable: false},
    VERTEX_ATTRIB_ARRAY_ENABLED: {value: 34338, writable: false, enumerable: true, configurable: false},
    VERTEX_ATTRIB_ARRAY_SIZE: {value: 34339, writable: false, enumerable: true, configurable: false},
    VERTEX_ATTRIB_ARRAY_STRIDE: {value: 34340, writable: false, enumerable: true, configurable: false},
    VERTEX_ATTRIB_ARRAY_TYPE: {value: 34341, writable: false, enumerable: true, configurable: false},
    VERTEX_ATTRIB_ARRAY_NORMALIZED: {value: 34922, writable: false, enumerable: true, configurable: false},
    VERTEX_ATTRIB_ARRAY_POINTER: {value: 34373, writable: false, enumerable: true, configurable: false},
    VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: {value: 34975, writable: false, enumerable: true, configurable: false},
    IMPLEMENTATION_COLOR_READ_TYPE: {value: 35738, writable: false, enumerable: true, configurable: false},
    IMPLEMENTATION_COLOR_READ_FORMAT: {value: 35739, writable: false, enumerable: true, configurable: false},
    COMPILE_STATUS: {value: 35713, writable: false, enumerable: true, configurable: false},
    LOW_FLOAT: {value: 36336, writable: false, enumerable: true, configurable: false},
    MEDIUM_FLOAT: {value: 36337, writable: false, enumerable: true, configurable: false},
    HIGH_FLOAT: {value: 36338, writable: false, enumerable: true, configurable: false},
    LOW_INT: {value: 36339, writable: false, enumerable: true, configurable: false},
    MEDIUM_INT: {value: 36340, writable: false, enumerable: true, configurable: false},
    HIGH_INT: {value: 36341, writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER: {value: 36160, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER: {value: 36161, writable: false, enumerable: true, configurable: false},
    RGBA4: {value: 32854, writable: false, enumerable: true, configurable: false},
    RGB5_A1: {value: 32855, writable: false, enumerable: true, configurable: false},
    RGB565: {value: 36194, writable: false, enumerable: true, configurable: false},
    DEPTH_COMPONENT16: {value: 33189, writable: false, enumerable: true, configurable: false},
    STENCIL_INDEX8: {value: 36168, writable: false, enumerable: true, configurable: false},
    DEPTH_STENCIL: {value: 34041, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER_WIDTH: {value: 36162, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER_HEIGHT: {value: 36163, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER_INTERNAL_FORMAT: {value: 36164, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER_RED_SIZE: {value: 36176, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER_GREEN_SIZE: {value: 36177, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER_BLUE_SIZE: {value: 36178, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER_ALPHA_SIZE: {value: 36179, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER_DEPTH_SIZE: {value: 36180, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER_STENCIL_SIZE: {value: 36181, writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: {value: 36048, writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: {value: 36049, writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: {value: 36050, writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: {
        value: 36051,
        writable: false,
        enumerable: true,
        configurable: false
    },
    COLOR_ATTACHMENT0: {value: 36064, writable: false, enumerable: true, configurable: false},
    DEPTH_ATTACHMENT: {value: 36096, writable: false, enumerable: true, configurable: false},
    STENCIL_ATTACHMENT: {value: 36128, writable: false, enumerable: true, configurable: false},
    DEPTH_STENCIL_ATTACHMENT: {value: 33306, writable: false, enumerable: true, configurable: false},
    NONE: {writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER_COMPLETE: {value: 36053, writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER_INCOMPLETE_ATTACHMENT: {value: 36054, writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: {value: 36055, writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER_INCOMPLETE_DIMENSIONS: {value: 36057, writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER_UNSUPPORTED: {value: 36061, writable: false, enumerable: true, configurable: false},
    FRAMEBUFFER_BINDING: {value: 36006, writable: false, enumerable: true, configurable: false},
    RENDERBUFFER_BINDING: {value: 36007, writable: false, enumerable: true, configurable: false},
    MAX_RENDERBUFFER_SIZE: {value: 34024, writable: false, enumerable: true, configurable: false},
    INVALID_FRAMEBUFFER_OPERATION: {value: 1286, writable: false, enumerable: true, configurable: false},
    UNPACK_FLIP_Y_WEBGL: {value: 37440, writable: false, enumerable: true, configurable: false},
    UNPACK_PREMULTIPLY_ALPHA_WEBGL: {value: 37441, writable: false, enumerable: true, configurable: false},
    CONTEXT_LOST_WEBGL: {value: 37442, writable: false, enumerable: true, configurable: false},
    UNPACK_COLORSPACE_CONVERSION_WEBGL: {value: 37443, writable: false, enumerable: true, configurable: false},
    BROWSER_DEFAULT_WEBGL: {value: 37444, writable: false, enumerable: true, configurable: false},
    activeTexture: {writable: true, enumerable: true, configurable: true},
    attachShader: {writable: true, enumerable: true, configurable: true},
    bindAttribLocation: {writable: true, enumerable: true, configurable: true},
    bindRenderbuffer: {writable: true, enumerable: true, configurable: true},
    blendColor: {writable: true, enumerable: true, configurable: true},
    blendEquation: {writable: true, enumerable: true, configurable: true},
    blendEquationSeparate: {writable: true, enumerable: true, configurable: true},
    blendFunc: {writable: true, enumerable: true, configurable: true},
    blendFuncSeparate: {writable: true, enumerable: true, configurable: true},
    bufferData: {writable: true, enumerable: true, configurable: true},
    bufferSubData: {writable: true, enumerable: true, configurable: true},
    checkFramebufferStatus: {writable: true, enumerable: true, configurable: true},
    compileShader: {writable: true, enumerable: true, configurable: true},
    compressedTexImage2D: {writable: true, enumerable: true, configurable: true},
    compressedTexSubImage2D: {writable: true, enumerable: true, configurable: true},
    copyTexImage2D: {writable: true, enumerable: true, configurable: true},
    copyTexSubImage2D: {writable: true, enumerable: true, configurable: true},
    createBuffer: {writable: true, enumerable: true, configurable: true},
    createFramebuffer: {writable: true, enumerable: true, configurable: true},
    createProgram: {writable: true, enumerable: true, configurable: true},
    createRenderbuffer: {writable: true, enumerable: true, configurable: true},
    createShader: {writable: true, enumerable: true, configurable: true},
    createTexture: {writable: true, enumerable: true, configurable: true},
    cullFace: {writable: true, enumerable: true, configurable: true},
    deleteBuffer: {writable: true, enumerable: true, configurable: true},
    deleteFramebuffer: {writable: true, enumerable: true, configurable: true},
    deleteProgram: {writable: true, enumerable: true, configurable: true},
    deleteRenderbuffer: {writable: true, enumerable: true, configurable: true},
    deleteShader: {writable: true, enumerable: true, configurable: true},
    deleteTexture: {writable: true, enumerable: true, configurable: true},
    depthFunc: {writable: true, enumerable: true, configurable: true},
    depthMask: {writable: true, enumerable: true, configurable: true},
    depthRange: {writable: true, enumerable: true, configurable: true},
    detachShader: {writable: true, enumerable: true, configurable: true},
    disable: {writable: true, enumerable: true, configurable: true},
    enable: {writable: true, enumerable: true, configurable: true},
    finish: {writable: true, enumerable: true, configurable: true},
    flush: {writable: true, enumerable: true, configurable: true},
    framebufferRenderbuffer: {writable: true, enumerable: true, configurable: true},
    framebufferTexture2D: {writable: true, enumerable: true, configurable: true},
    frontFace: {writable: true, enumerable: true, configurable: true},
    generateMipmap: {writable: true, enumerable: true, configurable: true},
    getActiveAttrib: {writable: true, enumerable: true, configurable: true},
    getActiveUniform: {writable: true, enumerable: true, configurable: true},
    getAttachedShaders: {writable: true, enumerable: true, configurable: true},
    getAttribLocation: {writable: true, enumerable: true, configurable: true},
    getBufferParameter: {writable: true, enumerable: true, configurable: true},
    getContextAttributes: {writable: true, enumerable: true, configurable: true},
    getError: {writable: true, enumerable: true, configurable: true},
    getExtension: {writable: true, enumerable: true, configurable: true},
    getFramebufferAttachmentParameter: {writable: true, enumerable: true, configurable: true},
    getParameter: {writable: true, enumerable: true, configurable: true},
    getProgramInfoLog: {writable: true, enumerable: true, configurable: true},
    getProgramParameter: {writable: true, enumerable: true, configurable: true},
    getRenderbufferParameter: {writable: true, enumerable: true, configurable: true},
    getShaderInfoLog: {writable: true, enumerable: true, configurable: true},
    getShaderParameter: {writable: true, enumerable: true, configurable: true},
    getShaderPrecisionFormat: {writable: true, enumerable: true, configurable: true},
    getShaderSource: {writable: true, enumerable: true, configurable: true},
    getSupportedExtensions: {writable: true, enumerable: true, configurable: true},
    getTexParameter: {writable: true, enumerable: true, configurable: true},
    getUniform: {writable: true, enumerable: true, configurable: true},
    getUniformLocation: {writable: true, enumerable: true, configurable: true},
    getVertexAttrib: {writable: true, enumerable: true, configurable: true},
    getVertexAttribOffset: {writable: true, enumerable: true, configurable: true},
    hint: {writable: true, enumerable: true, configurable: true},
    isBuffer: {writable: true, enumerable: true, configurable: true},
    isContextLost: {writable: true, enumerable: true, configurable: true},
    isEnabled: {writable: true, enumerable: true, configurable: true},
    isFramebuffer: {writable: true, enumerable: true, configurable: true},
    isProgram: {writable: true, enumerable: true, configurable: true},
    isRenderbuffer: {writable: true, enumerable: true, configurable: true},
    isShader: {writable: true, enumerable: true, configurable: true},
    isTexture: {writable: true, enumerable: true, configurable: true},
    lineWidth: {writable: true, enumerable: true, configurable: true},
    linkProgram: {writable: true, enumerable: true, configurable: true},
    pixelStorei: {writable: true, enumerable: true, configurable: true},
    polygonOffset: {writable: true, enumerable: true, configurable: true},
    readPixels: {writable: true, enumerable: true, configurable: true},
    renderbufferStorage: {writable: true, enumerable: true, configurable: true},
    sampleCoverage: {writable: true, enumerable: true, configurable: true},
    shaderSource: {writable: true, enumerable: true, configurable: true},
    stencilFunc: {writable: true, enumerable: true, configurable: true},
    stencilFuncSeparate: {writable: true, enumerable: true, configurable: true},
    stencilMask: {writable: true, enumerable: true, configurable: true},
    stencilMaskSeparate: {writable: true, enumerable: true, configurable: true},
    stencilOp: {writable: true, enumerable: true, configurable: true},
    stencilOpSeparate: {writable: true, enumerable: true, configurable: true},
    texImage2D: {writable: true, enumerable: true, configurable: true},
    texParameterf: {writable: true, enumerable: true, configurable: true},
    texParameteri: {writable: true, enumerable: true, configurable: true},
    texSubImage2D: {writable: true, enumerable: true, configurable: true},
    useProgram: {writable: true, enumerable: true, configurable: true},
    validateProgram: {writable: true, enumerable: true, configurable: true},
    bindBuffer: {writable: true, enumerable: true, configurable: true},
    bindFramebuffer: {writable: true, enumerable: true, configurable: true},
    bindTexture: {writable: true, enumerable: true, configurable: true},
    clear: {writable: true, enumerable: true, configurable: true},
    clearColor: {writable: true, enumerable: true, configurable: true},
    clearDepth: {writable: true, enumerable: true, configurable: true},
    clearStencil: {writable: true, enumerable: true, configurable: true},
    colorMask: {writable: true, enumerable: true, configurable: true},
    disableVertexAttribArray: {writable: true, enumerable: true, configurable: true},
    drawArrays: {writable: true, enumerable: true, configurable: true},
    drawElements: {writable: true, enumerable: true, configurable: true},
    enableVertexAttribArray: {writable: true, enumerable: true, configurable: true},
    scissor: {writable: true, enumerable: true, configurable: true},
    uniform1f: {writable: true, enumerable: true, configurable: true},
    uniform1fv: {writable: true, enumerable: true, configurable: true},
    uniform1i: {writable: true, enumerable: true, configurable: true},
    uniform1iv: {writable: true, enumerable: true, configurable: true},
    uniform2f: {writable: true, enumerable: true, configurable: true},
    uniform2fv: {writable: true, enumerable: true, configurable: true},
    uniform2i: {writable: true, enumerable: true, configurable: true},
    uniform2iv: {writable: true, enumerable: true, configurable: true},
    uniform3f: {writable: true, enumerable: true, configurable: true},
    uniform3fv: {writable: true, enumerable: true, configurable: true},
    uniform3i: {writable: true, enumerable: true, configurable: true},
    uniform3iv: {writable: true, enumerable: true, configurable: true},
    uniform4f: {writable: true, enumerable: true, configurable: true},
    uniform4fv: {writable: true, enumerable: true, configurable: true},
    uniform4i: {writable: true, enumerable: true, configurable: true},
    uniform4iv: {writable: true, enumerable: true, configurable: true},
    uniformMatrix2fv: {writable: true, enumerable: true, configurable: true},
    uniformMatrix3fv: {writable: true, enumerable: true, configurable: true},
    uniformMatrix4fv: {writable: true, enumerable: true, configurable: true},
    vertexAttrib1f: {writable: true, enumerable: true, configurable: true},
    vertexAttrib1fv: {writable: true, enumerable: true, configurable: true},
    vertexAttrib2f: {writable: true, enumerable: true, configurable: true},
    vertexAttrib2fv: {writable: true, enumerable: true, configurable: true},
    vertexAttrib3f: {writable: true, enumerable: true, configurable: true},
    vertexAttrib3fv: {writable: true, enumerable: true, configurable: true},
    vertexAttrib4f: {writable: true, enumerable: true, configurable: true},
    vertexAttrib4fv: {writable: true, enumerable: true, configurable: true},
    vertexAttribPointer: {writable: true, enumerable: true, configurable: true},
    viewport: {writable: true, enumerable: true, configurable: true},
    constructor: {writable: true, enumerable: false, configurable: true},
    makeXRCompatible: {writable: true, enumerable: true, configurable: true},
    [Symbol.toStringTag]: {
        value: "WebGLRenderingContext",
        writable: false,
        enumerable: false,
        configurable: true
    },
})

window.WebGLRenderingContext = WebGLRenderingContext


window.URLSearchParams = v_saf(URLSearchParams)
window.DOMException = v_saf(DOMException)
// fingerprint.screen.availWidth =parseInt((_random()*100+900) / 1000 * 1920);
// fingerprint.screen.availHeight = parseInt((_random()*100+900) / 1000 * 1080);
// fingerprint.screen.width = fingerprint.screen.availWidth ;
// fingerprint.screen.height = fingerprint.screen.availHeight ;
window.screenX = ENV.windowParams.screenX;
window.screenY = ENV.windowParams.screenY;
window.devicePixelRatio = ENV.windowParams.devicePixelRatio;
window.isSecureContext = true
window.innerWidth = ENV.windowParams.innerWidth;
window.outerWidth = ENV.windowParams.outerWidth;
window.innerHeight = ENV.windowParams.innerHeight;
window.outerHeight = ENV.windowParams.outerHeight;
window.pageYOffset = ENV.windowParams.pageYOffset;
window.screenLeft = 0;
window.screenTop = parseInt(Math.random() * 10 + 20);
window.saffunc = v_saf


window.CSS = proxy({
    supports: function () {
        print('CSS.supports', arguments)
        return true;
    }
}, 'CSS')


window._eventListenerss = {}

// 补充环境


let ownKeysProxy = function (p) {
    return new Proxy(p, {
        ownKeys(target) {
            let res = Reflect.ownKeys(target);
            let r = [];
            for (let i = 0; i < res.length; i++) {
                if (!['arguments', 'caller', 'prototype'].includes(res[i])) {
                    r.push(res[i])
                }

            }
            return r;
        }
    })
}

let appIns = {};

appIns.getDetails = v_saf(()=>{
    console.log('App.getDetails')
})
appIns.getIsInstalled = ()=>{
    console.log('App.getIsInstalled')
    return false
}

appIns.installState = ()=>{
    console.log('App.installState')

}

appIns.runningState = ()=>{
    console.log('App.runningState')

}
appIns.InstallState = ()=>{
    console.log('App.InstallState')
    return {
        "DISABLED": "disabled",
        "INSTALLED": "installed",
        "NOT_INSTALLED": "not_installed"
    }
}

appIns.RunningState = ()=>{
    console.log('App.RunningState')
    return {
        "CANNOT_RUN": "cannot_run",
        "READY_TO_RUN": "ready_to_run",
        "RUNNING": "running"
    }
}

appIns.isInstalled = ()=>{
    console.log('App.isInstalled')
    return false
}
Object.defineProperties(appIns, {
    getDetails: {
        configurable: false,
    }
})

chrome = {
    app: appIns,
    csi: function () {
        return {
            "startE": Date.now(),
            "onloadT": Date.now() - parseInt(Math.random() * 10000 + 15000),
            "pageT": parseInt(Math.random() * 10000 + 15000),
            "tran": 15
        }
    },
    loadTimes: v_saf(function () {
        return {
            "requestTime": Date.now() / 1000,
            "startLoadTime": Date.now() / 1000,
            "commitLoadTime": Date.now() / 1000,
            "finishDocumentLoadTime": Date.now() / 1000,
            "finishLoadTime": Date.now() / 1000,
            "firstPaintTime": Date.now() / 1000,
            "firstPaintAfterLoadTime": 0,
            "navigationType": "Other",
            "wasFetchedViaSpdy": true,
            "wasNpnNegotiated": true,
            "npnNegotiatedProtocol": "h2",
            "wasAlternateProtocolAvailable": false,
            "connectionInfo": "h2"
        }
    })

}
window.chrome = chrome

window.Animation = v_saf(function Animation() {
})
window.DOMMatrixReadOnly = v_saf(function DOMMatrixReadOnly() {
})
window.DOMPoint = v_saf(function DOMPoint() {
})
window.DOMPointReadOnly = v_saf(function DOMPointReadOnly() {
})
window.IntersectionObserver = v_saf(function IntersectionObserver() {
})
window.MediaStream = v_saf(function MediaStream() {
})
window.MessageChannel = v_saf(function MessageChannel() {
})
window.Path2D = v_saf(function Path2D() {
})
window.PerformanceObserver = v_saf(function PerformanceObserver() {
})
window.PerformanceObserver.supportedEntryTypes = ['element', 'event', 'first-input', 'largest-contentful-paint', 'layout-shift', 'longtask', 'mark', 'measure', 'navigation', 'paint', 'resource', 'visibility-state']
window.ReadableStream = v_saf(function ReadableStream() {
})
window.TextDecoderStream = v_saf(function TextDecoderStream() {
})
window.TextEncoderStream = v_saf(function TextEncoderStream() {
})
window.TransformStream = v_saf(function TransformStream() {
})

window.onssage = function () {
    console.log('onssage', arguments)
}
// class Worker {
//     constructor(w) {
//         console.log('newWorker', w)
//         this.jsCode = w.blob.jsCode
//     }
//
//
//     set onmessage(args) {
//         console.log('set onmessage', args)
//     }
//
//     postMessage(arg) {
//         arg = {
//             data:arg
//         }
//         let js =  (this.jsCode[0] + '\n' + `onmessage(${JSON.stringify(arg)})`).replaceAll('postMessage', 'window.onssage').replaceAll('var', 'let').replaceAll('function getWebGL', 'let getWebGL = function').replaceAll('OffscreenCanvas', 'window.OffscreenCanvas').replaceAll('let getWebGL = function(c){let graphicsLib=null;try{graphicsLib=c.getContext(\'webgl\')||c.getContext(\'experimental-webgl\');}catch(ignored){}return graphicsLib;}', '')
//         js = 'getWebGL = function(c){let graphicsLib=null;try{graphicsLib=c.getContext(\'webgl\')||c.getContext(\'experimental-webgl\');}catch(ignored){}return graphicsLib;}\n' + js
//         console.log('Worker.postMessage', arg)
//
//     }
//
//     terminate() {
//
//     }
// }

// Worker.prototype = proxy(Worker.prototype, 'Worker.proto')
window.Worker = proxy(v_saf(Worker), 'Worker')

class OffscreenCanvas {
    width = 0;
    height = 0;
    _canvas = null;

    constructor(w, h) {
        console.log('OffscreenCanvas new', w, h)
        this.width = w;
        this.height = h;
        this._canvas = Canvas.createCanvas(w, h)
    }

    getContext(type) {

        let res = this._canvas.getContext(type)
        if (type === 'webgl') {
            let t = proxy(new window.WebGLRenderingContext(), 'offCanvas.webgl')

            return t
        }
        // return proxy(res, 'newContext')
        console.log('OffscreenCanvas getContext', type, res)
        if (type == '2d') {
            res = new OffscreenCanvasRenderingContext2D();
        }
        return res;

    }
}

window.OffscreenCanvas = proxy(OffscreenCanvas, 'OffscreenCanvas')

RTCSessionDescription = v_saf(function RTCSessionDescription() {
})

getRanHex = size => {
    let result = [];
    let hexRef = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];

    for (let n = 0; n < size; n++) {
        result.push(hexRef[Math.floor(_random() * 16)].toUpperCase() + hexRef[Math.floor(_random() * 16)].toUpperCase());
    }
    return result;
}
Object.defineProperties(RTCSessionDescription.prototype, {
    sdp: {
        get: v_saf(function get() {
            let t1 = parseInt(Math.random() * (9145445486224659982 / 2) + 9145445486224659982 / 1.2)
            let hex = getRanHex(32).join(':');
            let res = `v=0
o=- ${t1} 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
a=extmap-allow-mixed
a=msid-semantic: WMS
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:Pz1P
a=ice-pwd:2RkyfgKRyILQtDZZ5mluUlPS
a=ice-options:trickle
a=fingerprint:sha-256 ${hex}
a=setup:actpass
a=mid:0
a=sctp-port:5000
a=max-message-size:262144`
            print("  [*] RTCSessionDescription -> sdp[get]", res);


        })
    },
    type: {
        get: v_saf(function get() {
            print("  [*] RTCSessionDescription -> type[get]", "offer");
            return "offer"
        })
    },
    [Symbol.toStringTag]: {value: "RTCSessionDescription", writable: false, enumerable: false, configurable: true},
})

class RTCDataChannel {
    constructor(label) {
        this._label = label
    }
}

Object.defineProperties(RTCDataChannel.prototype, {
    onopen: {
        set(args) {
            console.log('RTCDataChannel.onopen', args)
        }
    },

    onmessage: {
        set(args) {
            console.log('RTCDataChannel.onmessage', args)
        }
    }
})

class RTCPeerConnectionIceEvent {
    constructor() {
    }
}

function guid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        var r = Math.random() * 16 | 0,
            v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}

Object.defineProperties(RTCPeerConnectionIceEvent.prototype, {
    candidate: {
        get() {
            let t1 = parseInt(Math.random() * 2430043322 / 2 + 1430043322);
            let t2 = parseInt(Math.random() * 2430043322 / 2 + 1430043322);
            let t3 = parseInt(Math.random() * 500 + 60599);
            let ip = `192.168.${parseInt(Math.random() * 150 + 1)}.${parseInt(Math.random() * 150 + 1)}`
            let res = `candidate:${t1} 1 udp ${t2} ${guid()}.local ${t3} typ host generation 0 ufrag MiWK network-cost 999`
            res = `candidate:${t1} 1 udp ${t2} ${ip} ${t3} typ host generation 0 ufrag ZZHV network-id 1`
            res = `candidate:${t1} 1 tcp ${t2} ${ip} 9 typ host tcptype active generation 0 ufrag ZZHV network-id 1`
            console.log('RTCPeerConnectionIceEvent.candidate.get', res)
            return res;


        }
    }
})

class RTCPeerConnection {
    constructor(args) {
        console.log('RTCPeerConnection.new', args)

        return proxy({
            createDataChannel: function createDataChannel(label, option) {
                print("  [*] RTCPeerConnection -> createDataChannel[func]", [].slice.call(arguments));
                let res = new RTCDataChannel(label)
                return proxy(res, 'dataChannel')
            },
            createOffer: function createOffer() {
                print("  [*] RTCPeerConnection -> createOffer[func]", [].slice.call(arguments));
                // let p = new Promise(function (resolve, reject) {
                //     // 2. 执行异步操作任务
                //     print('RTCPeerConnection createOffer', resolve, reject);
                //     let res = v_new(RTCSessionDescription)
                //     res.sdp = RTCSessionDescription.prototype.sdp
                //     res.type = RTCSessionDescription.prototype.type
                //     resolve(res)
                // })
                // return p;
                return {
                    then: function (func, func2) {
                        v_console_log("  [*] RTCPeerConnection -> createOffer[func] then", [].slice.call(arguments));
                        func2(v_new(RTCSessionDescription));
                        func(v_new(RTCSessionDescription));
                        return func(v_new(RTCSessionDescription));
                    }, catch: function () {
                    }
                }
            },
            setLocalDescription: v_saf(function setLocalDescription() {
                var _this = this;
                print("  [*] RTCPeerConnection -> setLocalDescription[func]", [].slice.call(arguments));
                this.onicecandidate(
                    proxy(new RTCPeerConnectionIceEvent(), 'RTCPeerConnectionIceEvent')
                )
                // let p = new Promise(function (resolve, reject) {
                //     // 2. 执行异步操作任务
                //     // let res = this.setLocalDescription(v_new(RTCSessionDescription))
                //     // console.log('RTCPeerConnection create',res);
                //     print("  [*] RTCPeerConnection -> setLocalDescription[func] then", [].slice.call(arguments));
                //     publicDescription = arguments[0]
                //     _this._onicecandidate({
                //         candidate: {
                //             address: "192.168.50.235",
                //             candidate: "candidate:417527190 1 udp 2122260223 192.168.50.235 61081 typ host generation 0 ufrag WlUH network-id 1",
                //             component: "rtp",
                //             foundation: "417527190",
                //             port: 61081,
                //             priority: 2122260223,
                //             protocol: "udp",
                //             relatedAddress: null,
                //             relatedPort: null,
                //             sdpMLineIndex: 0,
                //             sdpMid: "0",
                //             tcpType: null,
                //             type: "host",
                //             usernameFragment: "WlUH",
                //         }
                //     })
                //     // window.debug = true
                //     resolve(publicDescription)
                //     // return res
                // })
                // return p;
                return {
                    then: function (func, func2) {
                        print("  [*] RTCPeerConnection -> setLocalDescription[func] then", [].slice.call(arguments));

                        _this._onicecandidate({
                            candidate: {
                                address: "192.168.50.235",
                                candidate: "candidate:417527190 1 udp 2122260223 192.168.50.235 61081 typ host generation 0 ufrag WlUH network-id 1",
                                component: "rtp",
                                foundation: "417527190",
                                port: 61081,
                                priority: 2122260223,
                                protocol: "udp",
                                relatedAddress: null,
                                relatedPort: null,
                                sdpMLineIndex: 0,
                                sdpMid: "0",
                                tcpType: null,
                                type: "host",
                                usernameFragment: "WlUH",
                            }
                        })

                        return this
                    }, catch: function () {
                    }
                }
            })

        }, 'RTCPeerConnection.new')
    }
}

Object.defineProperties(RTCPeerConnection.prototype, {
    localDescription: {
        value: {
            get: v_saf(function get() {
                print('get localDescription')
                return publicDescription
            })
        }
    },
    onicecandidate: {
        set() {
            print("  [*] RTCPeerConnection -> onicecandidate[set]", [].slice.call(arguments));
            this._onicecandidate = arguments[0]
        }
    },

    createDataChannel: {
        value: v_saf(function createDataChannel(label, option) {
            print("  [*] RTCPeerConnection -> createDataChannel[func]", [].slice.call(arguments));
            let res = {
                'onopen': function onopen() {
                    print("  [*] RTCPeerConnection -> createDataChannel[func] onopen", [].slice.call(arguments));

                },
                'onmessage': function onmessage() {
                    print("  [*] RTCPeerConnection -> createDataChannel[func] onmessage", [].slice.call(arguments));

                },
            }
            return proxy(res, 'dataChannel')
        })
    },
    createOffer: {
        value: v_saf(function createOffer() {
            print("  [*] RTCPeerConnection -> createOffer[func]", [].slice.call(arguments));
            // let p = new Promise(function (resolve, reject) {
            //     // 2. 执行异步操作任务
            //     print('RTCPeerConnection createOffer', resolve, reject);
            //     let res = v_new(RTCSessionDescription)
            //     res.sdp = RTCSessionDescription.prototype.sdp
            //     res.type = RTCSessionDescription.prototype.type
            //     resolve(res)
            // })
            // return p;
            return {
                then: function (func, func2) {
                    v_console_log("  [*] RTCPeerConnection -> createOffer[func] then", [].slice.call(arguments));
                    func2(v_new(RTCSessionDescription));
                    func(v_new(RTCSessionDescription));
                    return func(v_new(RTCSessionDescription));
                }, catch: function () {
                }
            }
        })
    },
    setLocalDescription: {
        value: v_saf(function setLocalDescription() {
            var _this = this;
            print("  [*] RTCPeerConnection -> setLocalDescription[func]", [].slice.call(arguments));
            // let p = new Promise(function (resolve, reject) {
            //     // 2. 执行异步操作任务
            //     // let res = this.setLocalDescription(v_new(RTCSessionDescription))
            //     // console.log('RTCPeerConnection create',res);
            //     print("  [*] RTCPeerConnection -> setLocalDescription[func] then", [].slice.call(arguments));
            //     publicDescription = arguments[0]
            //     _this._onicecandidate({
            //         candidate: {
            //             address: "192.168.50.235",
            //             candidate: "candidate:417527190 1 udp 2122260223 192.168.50.235 61081 typ host generation 0 ufrag WlUH network-id 1",
            //             component: "rtp",
            //             foundation: "417527190",
            //             port: 61081,
            //             priority: 2122260223,
            //             protocol: "udp",
            //             relatedAddress: null,
            //             relatedPort: null,
            //             sdpMLineIndex: 0,
            //             sdpMid: "0",
            //             tcpType: null,
            //             type: "host",
            //             usernameFragment: "WlUH",
            //         }
            //     })
            //     // window.debug = true
            //     resolve(publicDescription)
            //     // return res
            // })
            // return p;
            return {
                then: function (func, func2) {
                    print("  [*] RTCPeerConnection -> setLocalDescription[func] then", [].slice.call(arguments));

                    _this._onicecandidate({
                        candidate: {
                            address: "192.168.50.235",
                            candidate: "candidate:417527190 1 udp 2122260223 192.168.50.235 61081 typ host generation 0 ufrag WlUH network-id 1",
                            component: "rtp",
                            foundation: "417527190",
                            port: 61081,
                            priority: 2122260223,
                            protocol: "udp",
                            relatedAddress: null,
                            relatedPort: null,
                            sdpMLineIndex: 0,
                            sdpMid: "0",
                            tcpType: null,
                            type: "host",
                            usernameFragment: "WlUH",
                        }
                    })

                    return this
                }, catch: function () {
                }
            }
        })
    },
    [Symbol.toStringTag]: {value: "RTCPeerConnection", writable: false, enumerable: false, configurable: true},
})

window.RTCPeerConnection = proxy(RTCPeerConnection, 'RTCPeerConnection')
window.webkitRTCPeerConnection = RTCPeerConnection
window.AuthenticatorResponse = v_saf(function AuthenticatorResponse() {
})
window.MutationObserver = v_saf(function MutationObserver() {
})
Object.defineProperties(window.MutationObserver.prototype, {
    observe: {
        value: function () {
            console.log('MutationObserver.observe')
        }
    },

})
window.WebKitMutationObserver = window.MutationObserver

window.Notification = v_saf(function Notification() {
})
window.SharedWorker = v_saf(function SharedWorker() {
})
window.event = v_saf(function event() {
})
window.frameElement = null
window.PushManager = v_saf(function PushManager() {
})
window.requestAnimationFrame = v_saf(function requestAnimationFrame() {
})
window.webkitRequestAnimationFrame = v_saf(function webkitRequestAnimationFrame() {
})
window.webkitResolveLocalFileSystemURL = v_saf(function webkitResolveLocalFileSystemURL() {
})
window.BluetoothUUID = v_saf(function BluetoothUUID() {
})


window.PublicKeyCredential = v_saf(function PublicKeyCredential() {
})
window.AuthenticatorAttestationResponse = v_saf(function AuthenticatorAttestationResponse() {
})
window.AuthenticatorAssertionResponse = v_saf(function AuthenticatorAssertionResponse() {
})


window.SubmitEvent = v_saf(function SubmitEvent() {
})
var v_new_toggle = true
MediaQueryList = v_saf(function MediaQueryList() {
    if (!v_new_toggle) {
        throw TypeError("Illegal constructor")
    }
    ;
});
let medias = [];
let mediaRes = {
    "(max-aspect-ratio: 33/32)": false,
    "(max-aspect-ratio: 67/64)": true,
    "(max-aspect-ratio: 135/128)": true,
    "(max-aspect-ratio: 271/256)": true,
    "(max-aspect-ratio: 543/512)": true,
    "(max-aspect-ratio: 1087/1024)": true,
    "(max-aspect-ratio: 2175/2048)": true,
    "(max-aspect-ratio: 4351/4096)": true,
    "(max-aspect-ratio: 8703/8192)": true,
    "(max-aspect-ratio: 17407/16384)": true,
    "(max-aspect-ratio: 34815/32768)": true,
    "(max-aspect-ratio: 69631/65536)": true,
    "(max-aspect-ratio: 139263/131072)": true,
    "(max-aspect-ratio: 278527/262144)": true,
    "(max-aspect-ratio: 557055/524288)": true,
    "(max-aspect-ratio: 1114111/1048576)": true,
    "(max-aspect-ratio: 2228223/2097152)": true,
    "(max-aspect-ratio: 4456447/4194304)": true,
    "(max-aspect-ratio: 8912895/8388608)": true,
    "(max-aspect-ratio: 17825791/16777216)": true,
    "(max-aspect-ratio: 35651583/33554432)": true,
    "(max-aspect-ratio: 71303167/67108864)": true,
    "(max-aspect-ratio: 142606335/134217728)": true,
    "(max-aspect-ratio: 285212671/268435456)": true,
    "(max-aspect-ratio: 570425343/536870912)": true,
    "(max-aspect-ratio: 1140850687/1073741824)": true,
    "(max-aspect-ratio: 2281701375/2147483648)": true,
    "(max-aspect-ratio: 4563402751/4294967296)": true,
    "(max-aspect-ratio: 9126805503/8589934592)": true,
    "(max-aspect-ratio: 18253611007/17179869184)": true,
    "(max-aspect-ratio: 36507222015/34359738368)": true,
    "(max-aspect-ratio: 73014444031/68719476736)": true,
    "(max-aspect-ratio: 146028888063/137438953472)": true,
    "(max-aspect-ratio: 292057776127/274877906944)": true,
    "(max-aspect-ratio: 584115552255/549755813888)": true,
    "(max-aspect-ratio: 1168231104511/1099511627776)": true,
    "(max-aspect-ratio: 2336462209023/2199023255552)": true,
    "(max-aspect-ratio: 4672924418047/4398046511104)": true,
    "(max-aspect-ratio: 9345848836095/8796093022208)": true,
    "(max-aspect-ratio: 18691697672191/17592186044416)": true,
    "(max-aspect-ratio: 37383395344383/35184372088832)": true,
    "(max-aspect-ratio: 74766790688767/70368744177664)": true,
    "(max-aspect-ratio: 149533581377535/140737488355328)": true,
    "(max-aspect-ratio: 299067162755071/281474976710656)": true,
    "(max-aspect-ratio: 598134325510143/562949953421312)": true,
    "(max-aspect-ratio: 1196268651020287/1125899906842624)": true,
    "(max-aspect-ratio: 17/16)": true,
    "(max-aspect-ratio: 35/32)": true,
    "(max-aspect-ratio: 71/64)": true,
    "(max-aspect-ratio: 143/128)": true,
    "(max-aspect-ratio: 287/256)": true,
    "(max-aspect-ratio: 575/512)": true,
    "(max-aspect-ratio: 1151/1024)": true,
    "(max-aspect-ratio: 2303/2048)": true,
    "(max-aspect-ratio: 4607/4096)": true,
    "(max-aspect-ratio: 9215/8192)": true,
    "(max-aspect-ratio: 18431/16384)": true,
    "(max-aspect-ratio: 36863/32768)": true,
    "(max-aspect-ratio: 73727/65536)": true,
    "(max-aspect-ratio: 147455/131072)": true,
    "(max-aspect-ratio: 294911/262144)": true,
    "(max-aspect-ratio: 589823/524288)": true,
    "(max-aspect-ratio: 1179647/1048576)": true,
    "(max-aspect-ratio: 2359295/2097152)": true,
    "(max-aspect-ratio: 4718591/4194304)": true,
    "(max-aspect-ratio: 9437183/8388608)": true,
    "(max-aspect-ratio: 18874367/16777216)": true,
    "(max-aspect-ratio: 37748735/33554432)": true,
    "(max-aspect-ratio: 75497471/67108864)": true,
    "(max-aspect-ratio: 150994943/134217728)": true,
    "(max-aspect-ratio: 301989887/268435456)": true,
    "(max-aspect-ratio: 603979775/536870912)": true,
    "(max-aspect-ratio: 1207959551/1073741824)": true,
    "(max-aspect-ratio: 2415919103/2147483648)": true,
    "(max-aspect-ratio: 4831838207/4294967296)": true,
    "(max-aspect-ratio: 9663676415/8589934592)": true,
    "(max-aspect-ratio: 19327352831/17179869184)": true,
    "(max-aspect-ratio: 38654705663/34359738368)": true,
    "(max-aspect-ratio: 77309411327/68719476736)": true,
    "(max-aspect-ratio: 154618822655/137438953472)": true,
    "(max-aspect-ratio: 309237645311/274877906944)": true,
    "(max-aspect-ratio: 618475290623/549755813888)": true,
    "(max-aspect-ratio: 1236950581247/1099511627776)": true,
    "(max-aspect-ratio: 2473901162495/2199023255552)": true,
    "(max-aspect-ratio: 4947802324991/4398046511104)": true,
    "(max-aspect-ratio: 9895604649983/8796093022208)": true,
    "(max-aspect-ratio: 19791209299967/17592186044416)": true,
    "(max-aspect-ratio: 39582418599935/35184372088832)": true,
    "(max-aspect-ratio: 79164837199871/70368744177664)": true,
    "(max-aspect-ratio: 158329674399743/140737488355328)": true,
    "(max-aspect-ratio: 316659348799487/281474976710656)": true,
    "(max-aspect-ratio: 633318697598975/562949953421312)": true,
    "(max-aspect-ratio: 1266637395197951/1125899906842624)": true,
    "(max-width: 919px)": false,
    "(max-width: 929px)": false,
    "(max-width: 934px)": true,
    "(max-width: 936px)": true,
    "(max-width: 937px)": true,
    "(min-resolution: 0.0001dpi)": true,
    "(max-resolution: 24dpi)": false,
    "(max-resolution: 48dpi)": false,
    "(max-resolution: 96dpi)": true,
    "(max-resolution: 72dpi)": false,
    "(max-resolution: 84dpi)": false,
    "(max-resolution: 90dpi)": false,
    "(max-resolution: 93dpi)": false,
    "(max-resolution: 95dpi)": false,
    "(overflow-inline: none)": false,
    "(overflow-inline: scroll)": false,
    "(max-aspect-ratio: 1/1)": false,
    "(max-aspect-ratio: 2/1)": true,
    "(max-aspect-ratio: 3/2)": true,
    "(max-aspect-ratio: 5/4)": true,
    "(max-aspect-ratio: 9/8)": true,
    "(max-aspect-ratio: 19/16)": true,
    "(max-aspect-ratio: 39/32)": true,
    "(max-aspect-ratio: 79/64)": true,
    "(max-aspect-ratio: 159/128)": true,
    "(max-aspect-ratio: 319/256)": true,
    "(max-aspect-ratio: 639/512)": true,
    "(max-aspect-ratio: 1279/1024)": true,
    "(max-aspect-ratio: 2559/2048)": true,
    "(max-aspect-ratio: 5119/4096)": true,
    "(max-aspect-ratio: 10239/8192)": true,
    "(max-aspect-ratio: 20479/16384)": true,
    "(max-aspect-ratio: 40959/32768)": true,
    "(max-aspect-ratio: 81919/65536)": true,
    "(max-aspect-ratio: 163839/131072)": true,
    "(max-aspect-ratio: 327679/262144)": true,
    "(max-aspect-ratio: 655359/524288)": true,
    "(max-aspect-ratio: 1310719/1048576)": true,
    "(max-aspect-ratio: 2621439/2097152)": true,
    "(max-aspect-ratio: 5242879/4194304)": true,
    "(max-aspect-ratio: 10485759/8388608)": true,
    "(max-aspect-ratio: 20971519/16777216)": true,
    "(max-aspect-ratio: 41943039/33554432)": true,
    "(max-aspect-ratio: 83886079/67108864)": true,
    "(max-aspect-ratio: 167772159/134217728)": true,
    "(max-aspect-ratio: 335544319/268435456)": true,
    "(max-aspect-ratio: 671088639/536870912)": true,
    "(max-aspect-ratio: 1342177279/1073741824)": true,
    "(max-aspect-ratio: 2684354559/2147483648)": true,
    "(max-aspect-ratio: 5368709119/4294967296)": true,
    "(max-aspect-ratio: 10737418239/8589934592)": true,
    "(max-aspect-ratio: 21474836479/17179869184)": true,
    "(max-aspect-ratio: 42949672959/34359738368)": true,
    "(max-aspect-ratio: 85899345919/68719476736)": true,
    "(max-aspect-ratio: 171798691839/137438953472)": true,
    "(max-aspect-ratio: 343597383679/274877906944)": true,
    "(max-aspect-ratio: 687194767359/549755813888)": true,
    "(max-aspect-ratio: 1374389534719/1099511627776)": true,
    "(max-aspect-ratio: 2748779069439/2199023255552)": true,
    "(max-aspect-ratio: 5497558138879/4398046511104)": true,
    "(max-aspect-ratio: 10995116277759/8796093022208)": true,
    "(max-aspect-ratio: 21990232555519/17592186044416)": true,
    "(max-aspect-ratio: 43980465111039/35184372088832)": true,
    "(max-aspect-ratio: 87960930222079/70368744177664)": true,
    "(max-aspect-ratio: 175921860444159/140737488355328)": true,
    "(max-aspect-ratio: 351843720888319/281474976710656)": true,
    "(max-aspect-ratio: 703687441776639/562949953421312)": true,
    "(max-aspect-ratio: 1407374883553279/1125899906842624)": true,
    "(grid: 0)": true,
    "(grid: 1)": false,
    "(any-hover: none)": false,
    "(any-hover: hover)": true,
    "(q: 1)": false,
    "(max-height: 600px)": false,
    "(max-height: 1200px)": true,
    "(max-height: 900px)": true,
    "(max-height: 750px)": false,
    "(max-height: 825px)": false,
    "(max-height: 863px)": false,
    "(max-height: 882px)": false,
    "(max-height: 891px)": true,
    "(max-height: 887px)": false,
    "(max-height: 889px)": false,
    "(max-height: 890px)": false,
    "(max-width: 600px)": false,
    "(max-width: 1200px)": true,
    "(max-width: 900px)": false,
    "(max-width: 1050px)": true,
    "(max-width: 975px)": true,
    "(max-width: 938px)": true,
    "(max-width: 957px)": true,
    "(max-width: 966px)": true,
    "(max-width: 971px)": true,
    "(max-width: 973px)": true,
    "(max-width: 974px)": true,
    "(max-color-index: 1000)": true,
    "(max-color-index: 500)": true,
    "(max-color-index: 250)": true,
    "(max-color-index: 125)": true,
    "(max-color-index: 62)": true,
    "(max-color-index: 31)": true,
    "(max-color-index: 15)": true,
    "(max-color-index: 7)": true,
    "(max-color-index: 3)": true,
    "(max-color-index: 1)": true,
    "(max-color-index: 0)": true,
    "(forced-colors: none)": true,
    "(forced-colors: active)": false,
    "(prefers-reduced-transparency: no-preference)": false,
    "(prefers-reduced-transparency: reduce)": false,
    "(light-level: normal)": false,
    "(light-level: dim)": false,
    "(light-level: washed)": false,
    "(max-color: 8)": true,
    "(max-color: 4)": false,
    "(max-color: 6)": false,
    "(max-color: 7)": false,
    "(hover: none)": false,
    "(hover: hover)": true,
    "(max-monochrome: 1)": true,
    "(max-monochrome: 0)": true,
    "(prefers-reduced-motion: no-preference)": true,
    "(prefers-reduced-motion: reduce)": false,
    "(pointer: none)": false,
    "(pointer: coarse)": false,
    "(pointer: fine)": true,
    "(color-gamut: srgb)": true,
    "(color-gamut: p3)": false,
    "(color-gamut: rec2020)": false,
    "(scripting: none)": false,
    "(scripting: initial-only)": false,
    "(scripting: enabled)": false,
    "(scan: interlace)": false,
    "(scan: progressive)": false,
    "(display-mode: fullscreen)": false,
    "(display-mode: standalone)": false,
    "(display-mode: minimal-ui)": false,
    "(display-mode: browser)": true,
    "(inverted-colors: none)": false,
    "(inverted-colors: inverted)": false,
    "(overflow-block: none)": false,
    "(overflow-block: scroll)": false,
    "(overflow-block: optional-paged)": false,
    "(overflow-block: paged)": false,
    "(orientation: landscape)": true,
    "(orientation: portrait)": false,
    "(prefers-contrast: no-preference)": true,
    "(prefers-contrast: high)": false,
    "(prefers-contrast: low)": false,
    "(any-pointer: none)": false,
    "(any-pointer: coarse)": false,
    "(any-pointer: fine)": true,
    "(update: none)": false,
    "(update: slow)": false,
    "(update: fast)": false,
    "(prefers-color-scheme: no-preference)": false,
    "(prefers-color-scheme: light)": false,
    "(prefers-color-scheme: dark)": true,
    "(max-aspect-ratio: 11/8)": true,
    "(max-aspect-ratio: 23/16)": true,
    "(max-aspect-ratio: 47/32)": true,
    "(max-aspect-ratio: 95/64)": true,
    "(max-aspect-ratio: 191/128)": true,
    "(max-aspect-ratio: 383/256)": true,
    "(max-aspect-ratio: 767/512)": true,
    "(max-aspect-ratio: 1535/1024)": true,
    "(max-aspect-ratio: 3071/2048)": true,
    "(max-aspect-ratio: 6143/4096)": true,
    "(max-aspect-ratio: 12287/8192)": true,
    "(max-aspect-ratio: 24575/16384)": true,
    "(max-aspect-ratio: 49151/32768)": true,
    "(max-aspect-ratio: 98303/65536)": true,
    "(max-aspect-ratio: 196607/131072)": true,
    "(max-aspect-ratio: 393215/262144)": true,
    "(max-aspect-ratio: 786431/524288)": true,
    "(max-aspect-ratio: 1572863/1048576)": true,
    "(max-aspect-ratio: 3145727/2097152)": true,
    "(max-aspect-ratio: 6291455/4194304)": true,
    "(max-aspect-ratio: 12582911/8388608)": true,
    "(max-aspect-ratio: 25165823/16777216)": true,
    "(max-aspect-ratio: 50331647/33554432)": true,
    "(max-aspect-ratio: 100663295/67108864)": true,
    "(max-aspect-ratio: 201326591/134217728)": true,
    "(max-aspect-ratio: 402653183/268435456)": true,
    "(max-aspect-ratio: 805306367/536870912)": true,
    "(max-aspect-ratio: 1610612735/1073741824)": true,
    "(max-aspect-ratio: 3221225471/2147483648)": true,
    "(max-aspect-ratio: 6442450943/4294967296)": true,
    "(max-aspect-ratio: 12884901887/8589934592)": true,
    "(max-aspect-ratio: 25769803775/17179869184)": true,
    "(max-aspect-ratio: 51539607551/34359738368)": true,
    "(max-aspect-ratio: 103079215103/68719476736)": true,
    "(max-aspect-ratio: 206158430207/137438953472)": true,
    "(max-aspect-ratio: 412316860415/274877906944)": true,
    "(max-aspect-ratio: 824633720831/549755813888)": true,
    "(max-aspect-ratio: 1649267441663/1099511627776)": true,
    "(max-aspect-ratio: 3298534883327/2199023255552)": true,
    "(max-aspect-ratio: 6597069766655/4398046511104)": true,
    "(max-aspect-ratio: 13194139533311/8796093022208)": true,
    "(max-aspect-ratio: 26388279066623/17592186044416)": true,
    "(max-aspect-ratio: 52776558133247/35184372088832)": true,
    "(max-aspect-ratio: 105553116266495/70368744177664)": true,
    "(max-aspect-ratio: 211106232532991/140737488355328)": true,
    "(max-aspect-ratio: 422212465065983/281474976710656)": true,
    "(max-aspect-ratio: 844424930131967/562949953421312)": true,
    "(max-aspect-ratio: 1688849860263935/1125899906842624)": true,
    "(max-height: 896px)": true,
    "(max-height: 898px)": true,
    "(max-height: 899px)": true,
    "(max-width: 1013px)": true,
    "(max-width: 1032px)": true,
    "(max-width: 1041px)": true,
    "(max-width: 1046px)": true,
    "(max-width: 1048px)": true,
    "(max-width: 1049px)": true,
    "(max-aspect-ratio: 7/4)": true,
    "(max-aspect-ratio: 15/8)": true,
    "(max-aspect-ratio: 31/16)": true,
    "(max-aspect-ratio: 63/32)": true,
    "(max-aspect-ratio: 127/64)": true,
    "(max-aspect-ratio: 255/128)": true,
    "(max-aspect-ratio: 511/256)": true,
    "(max-aspect-ratio: 1023/512)": true,
    "(max-aspect-ratio: 2047/1024)": true,
    "(max-aspect-ratio: 4095/2048)": true,
    "(max-aspect-ratio: 8191/4096)": true,
    "(max-aspect-ratio: 16383/8192)": true,
    "(max-aspect-ratio: 32767/16384)": true,
    "(max-aspect-ratio: 65535/32768)": true,
    "(max-aspect-ratio: 131071/65536)": true,
    "(max-aspect-ratio: 262143/131072)": true,
    "(max-aspect-ratio: 524287/262144)": true,
    "(max-aspect-ratio: 1048575/524288)": true,
    "(max-aspect-ratio: 2097151/1048576)": true,
    "(max-aspect-ratio: 4194303/2097152)": true,
    "(max-aspect-ratio: 8388607/4194304)": true,
    "(max-aspect-ratio: 16777215/8388608)": true,
    "(max-aspect-ratio: 33554431/16777216)": true,
    "(max-aspect-ratio: 67108863/33554432)": true,
    "(max-aspect-ratio: 134217727/67108864)": true,
    "(max-aspect-ratio: 268435455/134217728)": true,
    "(max-aspect-ratio: 536870911/268435456)": true,
    "(max-aspect-ratio: 1073741823/536870912)": true,
    "(max-aspect-ratio: 2147483647/1073741824)": true,
    "(max-aspect-ratio: 4294967295/2147483648)": true,
    "(max-aspect-ratio: 8589934591/4294967296)": true,
    "(max-aspect-ratio: 17179869183/8589934592)": true,
    "(max-aspect-ratio: 34359738367/17179869184)": true,
    "(max-aspect-ratio: 68719476735/34359738368)": true,
    "(max-aspect-ratio: 137438953471/68719476736)": true,
    "(max-aspect-ratio: 274877906943/137438953472)": true,
    "(max-aspect-ratio: 549755813887/274877906944)": true,
    "(max-aspect-ratio: 1099511627775/549755813888)": true,
    "(max-aspect-ratio: 2199023255551/1099511627776)": true,
    "(max-aspect-ratio: 4398046511103/2199023255552)": true,
    "(max-aspect-ratio: 8796093022207/4398046511104)": true,
    "(max-aspect-ratio: 17592186044415/8796093022208)": true,
    "(max-aspect-ratio: 35184372088831/17592186044416)": true,
    "(max-aspect-ratio: 70368744177663/35184372088832)": true,
    "(max-aspect-ratio: 140737488355327/70368744177664)": true,
    "(max-aspect-ratio: 281474976710655/140737488355328)": true,
    "(max-aspect-ratio: 562949953421311/281474976710656)": true,
    "(max-aspect-ratio: 1125899906842623/562949953421312)": true,
    "(max-aspect-ratio: 2251799813685247/1125899906842624)": true,
    "(max-height: 1050px)": true,
    "(max-height: 1125px)": true,
    "(max-height: 1163px)": true,
    "(max-height: 1182px)": true,
    "(max-height: 1191px)": true,
    "(max-height: 1196px)": true,
    "(max-height: 1198px)": true,
    "(max-height: 1199px)": true,
    "(max-width: 1125px)": true,
    "(max-width: 1163px)": true,
    "(max-width: 1182px)": true,
    "(max-width: 1191px)": true,
    "(max-width: 1196px)": true,
    "(max-width: 1198px)": true,
    "(max-width: 1199px)": true,
    "(max-resolution: 192dpi)": true,
    "(max-resolution: 384dpi)": true,
    "(max-resolution: 768dpi)": true,
    "(max-resolution: 1536dpi)": true,
    "(max-resolution: 3072dpi)": true,
    "(max-resolution: 6144dpi)": true,
    "(max-resolution: 12288dpi)": true,
    "(max-resolution: 24576dpi)": true,
    "(max-resolution: 49152dpi)": true,
    "(max-resolution: 98304dpi)": true,
    "(max-resolution: 196608dpi)": true,
    "(max-resolution: 393216dpi)": true,
    "(max-resolution: 786432dpi)": true,
    "(max-resolution: 1572864dpi)": true,
    "(max-resolution: 3145728dpi)": true,
    "(max-resolution: 6291456dpi)": true,
    "(max-resolution: 12582912dpi)": true,
    "(max-resolution: 25165824dpi)": true,
    "(max-resolution: 50331648dpi)": true,
    "(max-resolution: 100663296dpi)": true,
    "(max-resolution: 201326592dpi)": true,
    "(max-resolution: 402653184dpi)": true,
    "(max-resolution: 805306368dpi)": true,
    "(max-resolution: 1610612736dpi)": true,
    "(max-resolution: 3221225472dpi)": true,
    "(max-resolution: 6442450944dpi)": true,
    "(max-resolution: 12884901888dpi)": true,
    "(max-resolution: 25769803776dpi)": true,
    "(max-resolution: 51539607552dpi)": true,
    "(max-resolution: 103079215104dpi)": true,
    "(max-resolution: 206158430208dpi)": true,
    "(max-resolution: 412316860416dpi)": true,
    "(max-resolution: 824633720832dpi)": true,
    "(max-resolution: 1649267441664dpi)": true,
    "(max-resolution: 3298534883328dpi)": true,
    "(max-resolution: 6597069766656dpi)": true,
    "(max-resolution: 13194139533312dpi)": true,
    "(max-resolution: 26388279066624dpi)": true,
    "(max-resolution: 52776558133248dpi)": true,
    "(max-resolution: 105553116266496dpi)": true,
    "(max-resolution: 211106232532992dpi)": true,
    "(max-resolution: 422212465065984dpi)": true,
    "(max-resolution: 844424930131968dpi)": true,
    "(max-resolution: 1688849860263936dpi)": true,
    "(max-resolution: 3377699720527872dpi)": true,
    "(max-resolution: 6755399441055744dpi)": true,
    "(max-resolution: 13510798882111488dpi)": true,
    "(max-resolution: 27021597764222976dpi)": true,
    "(max-resolution: 20266198323167230dpi)": true,
    "(max-resolution: 23643898043695104dpi)": true,
    "(max-resolution: 25332747903959040dpi)": true,
    "(max-resolution: 26177172834091010dpi)": true,
    "(max-resolution: 26599385299156990dpi)": true,
    "(max-resolution: 26810491531689984dpi)": true,
    "(max-resolution: 26916044647956480dpi)": true,
    "(max-resolution: 26968821206089730dpi)": true,
    "(max-resolution: 26995209485156350dpi)": true,
    "(max-resolution: 27008403624689664dpi)": true,
    "(max-resolution: 27015000694456320dpi)": true,
    "(max-resolution: 27018299229339650dpi)": true,
    "(max-resolution: 27019948496781310dpi)": true,
    "(max-resolution: 27020773130502144dpi)": true,
    "(max-resolution: 27021185447362560dpi)": true,
    "(max-resolution: 27021391605792770dpi)": true,
    "(max-resolution: 27021494685007870dpi)": true,
    "(max-resolution: 27021546224615424dpi)": true,
    "(max-resolution: 27021571994419200dpi)": true,
    "(max-resolution: 27021584879321090dpi)": true,
    "(max-resolution: 27021591321772030dpi)": true,
    "(max-resolution: 27021594542997504dpi)": true,
    "(max-resolution: 27021596153610240dpi)": true,
    "(max-resolution: 27021596958916610dpi)": true,
    "(max-resolution: 27021597361569790dpi)": true,
    "(max-resolution: 27021597562896384dpi)": true,
    "(max-resolution: 27021597663559680dpi)": true,
    "(max-resolution: 27021597713891330dpi)": true,
    "(max-resolution: 27021597739057150dpi)": true,
    "(max-resolution: 27021597751640064dpi)": true,
    "(max-resolution: 27021597757931520dpi)": true,
    "(max-resolution: 27021597761077250dpi)": true,
    "(max-resolution: 27021597762650110dpi)": true,
    "(max-resolution: 27021597763436544dpi)": true,
    "(max-resolution: 27021597763829760dpi)": true,
    "(max-resolution: 27021597764026370dpi)": true,
    "(max-resolution: 27021597764124670dpi)": true,
    "(max-resolution: 27021597764173824dpi)": true,
    "(max-resolution: 27021597764198400dpi)": true,
    "(max-resolution: 27021597764210690dpi)": true,
    "(max-resolution: 27021597764216830dpi)": true,
    "(max-resolution: 27021597764219904dpi)": true,
    "(max-resolution: 27021597764221440dpi)": true,
    "(max-resolution: 27021597764222210dpi)": true,
    "(max-resolution: 27021597764222590dpi)": true,
    "(max-resolution: 27021597764222784dpi)": true,
    "(max-resolution: 27021597764222880dpi)": true,
    "(max-resolution: 27021597764222930dpi)": true,
    "(max-resolution: 27021597764222950dpi)": true,
    "(max-resolution: 27021597764222964dpi)": true,
    "(max-aspect-ratio: 3/1)": true,
    "(max-aspect-ratio: 4/1)": true,
    "(max-aspect-ratio: 5/1)": true,
    "(max-aspect-ratio: 6/1)": true,
    "(max-aspect-ratio: 7/1)": true,
    "(max-aspect-ratio: 8/1)": true,
    "(max-aspect-ratio: 9/1)": true,
    "(max-aspect-ratio: 10/1)": true,
    "(max-aspect-ratio: 11/1)": true,
    "(max-aspect-ratio: 12/1)": true,
    "(max-aspect-ratio: 13/1)": true,
    "(max-aspect-ratio: 14/1)": true,
    "(max-aspect-ratio: 15/1)": true,
    "(max-aspect-ratio: 16/1)": true,
    "(max-aspect-ratio: 17/1)": true,
    "(max-aspect-ratio: 18/1)": true,
    "(max-aspect-ratio: 19/1)": true,
    "(max-aspect-ratio: 20/1)": true,
    "(max-aspect-ratio: 21/1)": true,
    "(max-aspect-ratio: 22/1)": true,
    "(max-aspect-ratio: 23/1)": true,
    "(max-aspect-ratio: 24/1)": true,
    "(max-aspect-ratio: 25/1)": true,
    "(max-aspect-ratio: 26/1)": true,
    "(max-aspect-ratio: 27/1)": true,
    "(max-aspect-ratio: 28/1)": true,
    "(max-aspect-ratio: 29/1)": true,
    "(max-aspect-ratio: 30/1)": true,
    "(max-aspect-ratio: 31/1)": true,
    "(max-aspect-ratio: 32/1)": true,
    "(max-aspect-ratio: 33/1)": true,
    "(max-aspect-ratio: 34/1)": true,
    "(max-aspect-ratio: 35/1)": true,
    "(max-aspect-ratio: 36/1)": true,
    "(max-aspect-ratio: 37/1)": true,
    "(max-aspect-ratio: 38/1)": true,
    "(max-aspect-ratio: 39/1)": true,
    "(max-aspect-ratio: 40/1)": true,
    "(max-aspect-ratio: 41/1)": true,
    "(max-aspect-ratio: 42/1)": true,
    "(max-aspect-ratio: 43/1)": true,
    "(max-aspect-ratio: 44/1)": true,
    "(max-aspect-ratio: 45/1)": true,
    "(max-aspect-ratio: 46/1)": true,
    "(max-aspect-ratio: 47/1)": true,
    "(max-aspect-ratio: 48/1)": true,
    "(max-aspect-ratio: 49/1)": true,
    "(max-aspect-ratio: 50/1)": true,
    "(max-aspect-ratio: 51/1)": true,
    "(max-aspect-ratio: 101/2)": true,
    "(max-aspect-ratio: 203/4)": true,
    "(max-aspect-ratio: 407/8)": true,
    "(max-aspect-ratio: 815/16)": true,
    "(max-aspect-ratio: 1631/32)": true,
    "(max-aspect-ratio: 3263/64)": true,
    "(max-aspect-ratio: 6527/128)": true,
    "(max-aspect-ratio: 13055/256)": true,
    "(max-aspect-ratio: 26111/512)": true,
    "(max-aspect-ratio: 52223/1024)": true,
    "(max-aspect-ratio: 104447/2048)": true,
    "(max-aspect-ratio: 208895/4096)": true,
    "(max-aspect-ratio: 417791/8192)": true,
    "(max-aspect-ratio: 835583/16384)": true,
    "(max-aspect-ratio: 1671167/32768)": true,
    "(max-aspect-ratio: 3342335/65536)": true,
    "(max-aspect-ratio: 6684671/131072)": true,
    "(max-aspect-ratio: 13369343/262144)": true,
    "(max-aspect-ratio: 26738687/524288)": true,
    "(max-aspect-ratio: 53477375/1048576)": true,
    "(max-aspect-ratio: 106954751/2097152)": true,
    "(max-aspect-ratio: 213909503/4194304)": true,
    "(max-aspect-ratio: 427819007/8388608)": true,
    "(max-aspect-ratio: 855638015/16777216)": true,
    "(max-aspect-ratio: 1711276031/33554432)": true,
    "(max-aspect-ratio: 3422552063/67108864)": true,
    "(max-aspect-ratio: 6845104127/134217728)": true,
    "(max-aspect-ratio: 13690208255/268435456)": true,
    "(max-aspect-ratio: 27380416511/536870912)": true,
    "(max-aspect-ratio: 54760833023/1073741824)": true,
    "(max-aspect-ratio: 109521666047/2147483648)": true,
    "(max-aspect-ratio: 219043332095/4294967296)": true,
    "(max-aspect-ratio: 438086664191/8589934592)": true,
    "(max-aspect-ratio: 876173328383/17179869184)": true,
    "(max-aspect-ratio: 1752346656767/34359738368)": true,
    "(max-aspect-ratio: 3504693313535/68719476736)": true,
    "(max-aspect-ratio: 7009386627071/137438953472)": true,
    "(max-aspect-ratio: 14018773254143/274877906944)": true,
    "(max-aspect-ratio: 28037546508287/549755813888)": true,
    "(max-aspect-ratio: 56075093016575/1099511627776)": true,
    "(max-aspect-ratio: 112150186033151/2199023255552)": true,
    "(max-aspect-ratio: 224300372066303/4398046511104)": true,
    "(max-aspect-ratio: 448600744132607/8796093022208)": true,
    "(max-aspect-ratio: 897201488265215/17592186044416)": true,
    "(max-aspect-ratio: 1794402976530431/35184372088832)": true,
    "(max-aspect-ratio: 3588805953060863/70368744177664)": true,
    "(max-aspect-ratio: 7177611906121727/140737488355328)": true,
    "(max-height: 2400px)": true,
    "(max-height: 4800px)": true,
    "(max-height: 9600px)": true,
    "(max-height: 19200px)": true,
    "(max-height: 38400px)": true,
    "(max-height: 76800px)": true,
    "(max-height: 153600px)": true,
    "(max-height: 307200px)": true,
    "(max-height: 614400px)": true,
    "(max-height: 1228800px)": true,
    "(max-height: 2457600px)": true,
    "(max-height: 4915200px)": true,
    "(max-height: 9830400px)": true,
    "(max-height: 19660800px)": true,
    "(max-height: 39321600px)": true,
    "(max-height: 78643200px)": true,
    "(max-height: 157286400px)": true,
    "(max-height: 314572800px)": true,
    "(max-height: 629145600px)": true,
    "(max-height: 1258291200px)": true,
    "(max-height: 2516582400px)": true,
    "(max-height: 5033164800px)": true,
    "(max-height: 10066329600px)": true,
    "(max-height: 20132659200px)": true,
    "(max-height: 40265318400px)": true,
    "(max-height: 80530636800px)": true,
    "(max-height: 161061273600px)": true,
    "(max-height: 322122547200px)": true,
    "(max-height: 644245094400px)": true,
    "(max-height: 1288490188800px)": true,
    "(max-height: 2576980377600px)": true,
    "(max-height: 5153960755200px)": true,
    "(max-height: 10307921510400px)": true,
    "(max-height: 20615843020800px)": true,
    "(max-height: 41231686041600px)": true,
    "(max-height: 82463372083200px)": true,
    "(max-height: 164926744166400px)": true,
    "(max-height: 329853488332800px)": true,
    "(max-height: 659706976665600px)": true,
    "(max-height: 1319413953331200px)": true,
    "(max-height: 2638827906662400px)": true,
    "(max-height: 5277655813324800px)": true,
    "(max-height: 10555311626649600px)": true,
    "(max-height: 21110623253299200px)": true,
    "(max-height: 42221246506598400px)": true,
    "(max-height: 84442493013196800px)": true,
    "(max-height: 168884986026393600px)": true,
    "(max-height: 337769972052787200px)": true,
    "(max-height: 675539944105574400px)": true,
    "(max-height: 506654958079180800px)": true,
    "(max-height: 591097451092377600px)": true,
    "(max-height: 633318697598976000px)": true,
    "(max-height: 654429320852275200px)": true,
    "(max-height: 664984632478924800px)": true,
    "(max-height: 670262288292249600px)": true,
    "(max-height: 672901116198912000px)": true,
    "(max-height: 674220530152243200px)": true,
    "(max-height: 674880237128908800px)": true,
    "(max-height: 675210090617241600px)": true,
    "(max-height: 675375017361408000px)": true,
    "(max-height: 675457480733491200px)": true,
    "(max-height: 675498712419532800px)": true,
    "(max-height: 675519328262553600px)": true,
    "(max-height: 675529636184064000px)": true,
    "(max-height: 675534790144819200px)": true,
    "(max-height: 675537367125196800px)": true,
    "(max-height: 675538655615385600px)": true,
    "(max-height: 675539299860480000px)": true,
    "(max-height: 675539621983027200px)": true,
    "(max-height: 675539783044300800px)": true,
    "(max-height: 675539863574937600px)": true,
    "(max-height: 675539903840256000px)": true,
    "(max-height: 675539923972915200px)": true,
    "(max-height: 675539934039244800px)": true,
    "(max-height: 675539939072409600px)": true,
    "(max-height: 675539941588992000px)": true,
    "(max-height: 675539942847283200px)": true,
    "(max-height: 675539943476428800px)": true,
    "(max-height: 675539943791001600px)": true,
    "(max-height: 675539943948288000px)": true,
    "(max-height: 675539944026931200px)": true,
    "(max-height: 675539944066252800px)": true,
    "(max-height: 675539944085913600px)": true,
    "(max-height: 675539944095744000px)": true,
    "(max-height: 675539944100659200px)": true,
    "(max-height: 675539944103116800px)": true,
    "(max-height: 675539944104345600px)": true,
    "(max-height: 675539944104960000px)": true,
    "(max-height: 675539944105267200px)": true,
    "(max-height: 675539944105420800px)": true,
    "(max-height: 675539944105497600px)": true,
    "(max-height: 675539944105536000px)": true,
    "(max-height: 675539944105555200px)": true,
    "(max-height: 675539944105564800px)": true,
    "(max-height: 675539944105569500px)": true,
    "(max-height: 675539944105572000px)": true,
    "(max-height: 675539944105573100px)": true,
    "(max-height: 675539944105573800px)": true,
    "(max-height: 675539944105574100px)": true,
    "(max-width: 2400px)": true,
    "(max-width: 4800px)": true,
    "(max-width: 9600px)": true,
    "(max-width: 19200px)": true,
    "(max-width: 38400px)": true,
    "(max-width: 76800px)": true,
    "(max-width: 153600px)": true,
    "(max-width: 307200px)": true,
    "(max-width: 614400px)": true,
    "(max-width: 1228800px)": true,
    "(max-width: 2457600px)": true,
    "(max-width: 4915200px)": true,
    "(max-width: 9830400px)": true,
    "(max-width: 19660800px)": true,
    "(max-width: 39321600px)": true,
    "(max-width: 78643200px)": true,
    "(max-width: 157286400px)": true,
    "(max-width: 314572800px)": true,
    "(max-width: 629145600px)": true,
    "(max-width: 1258291200px)": true,
    "(max-width: 2516582400px)": true,
    "(max-width: 5033164800px)": true,
    "(max-width: 10066329600px)": true,
    "(max-width: 20132659200px)": true,
    "(max-width: 40265318400px)": true,
    "(max-width: 80530636800px)": true,
    "(max-width: 161061273600px)": true,
    "(max-width: 322122547200px)": true,
    "(max-width: 644245094400px)": true,
    "(max-width: 1288490188800px)": true,
    "(max-width: 2576980377600px)": true,
    "(max-width: 5153960755200px)": true,
    "(max-width: 10307921510400px)": true,
    "(max-width: 20615843020800px)": true,
    "(max-width: 41231686041600px)": true,
    "(max-width: 82463372083200px)": true,
    "(max-width: 164926744166400px)": true,
    "(max-width: 329853488332800px)": true,
    "(max-width: 659706976665600px)": true,
    "(max-width: 1319413953331200px)": true,
    "(max-width: 2638827906662400px)": true,
    "(max-width: 5277655813324800px)": true,
    "(max-width: 10555311626649600px)": true,
    "(max-width: 21110623253299200px)": true,
    "(max-width: 42221246506598400px)": true,
    "(max-width: 84442493013196800px)": true,
    "(max-width: 168884986026393600px)": true,
    "(max-width: 337769972052787200px)": true,
    "(max-width: 675539944105574400px)": true,
    "(max-width: 506654958079180800px)": true,
    "(max-width: 591097451092377600px)": true,
    "(max-width: 633318697598976000px)": true,
    "(max-width: 654429320852275200px)": true,
    "(max-width: 664984632478924800px)": true,
    "(max-width: 670262288292249600px)": true,
    "(max-width: 672901116198912000px)": true,
    "(max-width: 674220530152243200px)": true,
    "(max-width: 674880237128908800px)": true,
    "(max-width: 675210090617241600px)": true,
    "(max-width: 675375017361408000px)": true,
    "(max-width: 675457480733491200px)": true,
    "(max-width: 675498712419532800px)": true,
    "(max-width: 675519328262553600px)": true,
    "(max-width: 675529636184064000px)": true,
    "(max-width: 675534790144819200px)": true,
    "(max-width: 675537367125196800px)": true,
    "(max-width: 675538655615385600px)": true,
    "(max-width: 675539299860480000px)": true,
    "(max-width: 675539621983027200px)": true,
    "(max-width: 675539783044300800px)": true,
    "(max-width: 675539863574937600px)": true,
    "(max-width: 675539903840256000px)": true,
    "(max-width: 675539923972915200px)": true,
    "(max-width: 675539934039244800px)": true,
    "(max-width: 675539939072409600px)": true,
    "(max-width: 675539941588992000px)": true,
    "(max-width: 675539942847283200px)": true,
    "(max-width: 675539943476428800px)": true,
    "(max-width: 675539943791001600px)": true,
    "(max-width: 675539943948288000px)": true,
    "(max-width: 675539944026931200px)": true,
    "(max-width: 675539944066252800px)": true,
    "(max-width: 675539944085913600px)": true,
    "(max-width: 675539944095744000px)": true,
    "(max-width: 675539944100659200px)": true,
    "(max-width: 675539944103116800px)": true,
    "(max-width: 675539944104345600px)": true,
    "(max-width: 675539944104960000px)": true,
    "(max-width: 675539944105267200px)": true,
    "(max-width: 675539944105420800px)": true,
    "(max-width: 675539944105497600px)": true,
    "(max-width: 675539944105536000px)": true,
    "(max-width: 675539944105555200px)": true,
    "(max-width: 675539944105564800px)": true,
    "(max-width: 675539944105569500px)": true,
    "(max-width: 675539944105572000px)": true,
    "(max-width: 675539944105573100px)": true,
    "(max-width: 675539944105573800px)": true,
    "(max-width: 675539944105574100px)": true
}


v_console_log = console.log
Object.defineProperties(MediaQueryList.prototype, {
    addListener: {
        addListener() {
            v_console_log("  [*] MediaQueryList -> addListener[get]", {});
            return {}
        }
    },
    removeListener: {
        removeListener() {
            v_console_log("  [*] MediaQueryList -> removeListener[get]", {});
            return {}
        }
    },
    // matches: {"value":0,"writable":true,"enumerable":true,"configurable":false},
    matches: {
        get() {
            medias.push(this.type[0]);
            let t = mediaRes[this.type[0]];
            if (t === undefined) {
                t = false;
            }
            v_console_log("  [*] MediaQueryList -> matches[get]", this.type[0], t);

            return t;
        }
    },

    media: {"value": 1, "writable": true, "enumerable": true, "configurable": false},
    onchange: {"value": 2, "writable": true, "enumerable": true, "configurable": false},
})
window.matchMedia = function matchMedia(type) {
    let t = new MediaQueryList()
    t.type = arguments
    return t;
}
window.structuredClone = v_saf(function structuredClone() {
    throw Error("Uncaught DOMException: Failed to execute 'structuredClone' on 'Window'")
})
window.ENV = ENV;
// window.window = window
print = console.log

// console.log = function () {}
document = window.document;
XMLHttpRequest = window.XMLHttpRequest
dispatchEvent = window.dispatchEvent
global = window
window.global = window
var idx = 0
// crypto.getRandomValues = function (a) {
//     console.log(a)
//
//     for (var i = 0; i < a.length; i++) {
//         a.fill(10000, i, i + 1)
//     }
// }
window.crypto = crypto;

_setTimeout = setTimeout
timesIds = 0;

// window.setTimeout = function setTimeout(func, delay) {
//     // console.log(func, delay)
//     // if (delay==0)func()
//     try {
//         // console.log(func)
//         if (delay == 0 && timeout) {
//             func()
//         }
//         // func()
//     } catch (e) {
//     }
//     // _setTimeout.call(this, func, 1)
//     timesIds++;
//     return timesIds;
// };

window.setInterval = function (func, delay) {
    // console.log('setInterval',delay,  func)
    try {
        func()
    } catch (e) {
    }
};


var events = {}
// function dispatchEvent(event) {
//     _console2('dispatchEvent', event)
//     if (event && event.type in events) {
//         events[event.type](event)
//     }
//     try {
//         event.instrumented = v_saf(function instrumented() {
//             v_console_log(" instrumented  call")
//         })
//         event.detail.exchange(event)
//     } catch (e) {
//
//     }
//     return true
//
// }


// var _stringify = JSON.stringify;
// JSON.stringify = v_saf(function () {
//     let res = _stringify.apply(this, arguments);
//
//     console.log('_stringify', arguments, res)
//
//     return res;
//
// })
_console2 = function () {
}


var _Error = Error
// Error = function (message) {
//     _console('error.msg', message)
//     if (message === 'Ninjas > pirates') {
//         var e = _Error(message)
//         e.stack = 'Error: Ninjas > pirates\n    at eval (eval at Function (:1371:29), <anonymous>:3:61616)\n    at _.<computed> [as life goes on] (eval at Function (:1371:29), <anonymous>:3:62065)\n    at eval (eval at Function (:1371:29), <anonymous>:3:66556)\n    at eval (eval at Function (:1371:29), <anonymous>:3:66208)'
//         e.message = message
//         return e
//     }
//     return _Error(message)
//
// }
const handler1 = {
    construct(target, args) {
        console.log(`Creating a ${target.name}`);
        // Expected output: "Creating a monster1"

        return new target(...args);
    },
    get: function (target, prop, receiver) {
        console.log("called: " + prop);
        console.log(target)
        let res = Reflect.get(target, prop, receiver);
        ;
        console.log(prop, 'res==>', res)
        return res;
    },
};

// Error = new Proxy(Error, handler1);

var times = 0;
var stackTrace = {};
let arggs = [];
window.videos = [];
window.fonts = [];
window.imageDatas = [];
con3 = console.log
con4 = console.log;

console.log = function () {
};



;;;


