npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

gogoanime-dhvit

v1.0.0

Published

Gogoanime is a custom API that provides data from the `10.gogoanime.io` website. You will have access to the entire catalog whether movies, series, current episodes, etc., with English subtitles.

Downloads

2

Readme

:tada: Updates in version v1.0.3 :tada:

  • [x] animeEpisodeHandler now handles invalid episode ids instead of crashing
  • [x] Can now pass the gogoanime website url via a .env file or via an environment variable.

:rocket: Custom gogoanime API Link

API URL DOES NOT WORK gogoanime api

Installation

Define the current gogoanime website url in a .env file or as an environment variable. An example is provided in the .env.example file.

In order to install the project and all dependencies, enter in the project folder and run npm install


Start Local Node/Express Server

npm run start

or

npm run dev

Testing API Methods

npm run dev-api

:handshake: Contributing

  • Fork it!
  • Create your feature branch: git checkout -b my-new-feature
  • Commit your changes: git commit -am 'Add some feature'
  • Push to the branch: git push origin my-new-feature
  • Submit a pull request

API Documentation

  const api = require('gogoanime');

📣Read this please | To get the videos!📣

api.animeEpisodeHandler([id])


First of all I must mention that the url of the videos work only using the iframe element. To get the videos (servers) of each chapter, you only need to use the api.animeEpisodeHandler function that receives the id of the episode as a parameter. To verify the id of each episode, look at the episodes property:

"episodes": 
  [
    {
      "id": "actors-songs-connection-episode-1"
    },
    {
      "id": "actors-songs-connection-episode-2"
    },
    {
      "id": "actors-songs-connection-episode-3"
    },
    {
      "id": "actors-songs-connection-episode-4"
    },
    {
      "id": "actors-songs-connection-episode-5"
    },
    {
      "id": "actors-songs-connection-episode-6"
    },
    {
      "id": "actors-songs-connection-episode-7"
    },
    {
      "id": "actors-songs-connection-episode-8"
    },
    {
      "id": "actors-songs-connection-episode-9"
    }
  ]

You just have to pass the id of the episode

api.animeEpisodeHandler('actors-songs-connection-episode-9')
  .then(res =>{
    console.log(res)
});
// 20191206103017
// https://gogoanime.now.sh/api/v1/AnimeEpisodeHandler/actors-songs-connection-episode-9

{
  "anime": [
    {
      "img": "https://cdnimg.xyz/cover/actors-songs-connection.png",
      "synopsis": "Plot Summary: Private Tenshou Gakuen is the seventh of ten school districts circled within a 130-meter tall wall with restricted entry and egress aside from officials. The academy is fully autonomous by the government but to strive for independence, the school allows students to engage in club activities after school, which comes with a strangely unique system. Each club is ranked according to its overall accumulated points gathered from various club activities and school events. Points can also be received by winning at the school's periodic Tenshou Gakuen Singing Contest, where many students compete. The members in the clubs work hard to win the contest for their goal.",
      "genres": [
        "music",
        "school"
      ],
      "category": "fall-2019-anime",
      "released": 2019,
      "status": "Ongoing",
      "otherName": "ACTORS -Songs Connection-",
      "totalEpisodes": 9,
      "servers": [
        {
          "name": "Vidstreaming",
          "iframe": "vidstreaming.io/streaming.php?id=MTM0NDQ5&title=Actors%3A+Songs+Connection+Episode+9"
        },
        {
          "name": "Xstreamcdn",
          "iframe": "https://www.fembed.com/v/ln5grsnzq283xe6"
        },
        {
          "name": "Vidcdn",
          "iframe": "vidstreaming.io/load.php?id=MTM0NDQ5&title=Actors%3A+Songs+Connection+Episode+9"
        },
        {
          "name": "Mp4Upload",
          "iframe": "https://www.mp4upload.com/embed-fiib7037qzho.html"
        }
      ]
    }
  ]
}

Now you just need to use the iframe property of each server and pass it to the iframe

<iframe 
  src="vidstreaming.io/streaming.php?id=MTM0NDQ5&title=Actors%3A+Songs+Connection+Episode+9"
   width="100%"  
   height="100%" 
   frameborder="0" 
   allowfullscreen
>
</iframe>

api.search([query])


// 20191206103743
// https://gogoanime.now.sh/api/v1/Search/tokyo%20ghoul

{
  "search": [
    {
      "title": "Tokyo Ghoul",
      "img": "https://cdnimg.xyz/images/summer/Tokyo Ghoul.jpg",
      "synopsis": "Plot Summary: Tokyo is haunted by mysterious ghouls who are devouring humans. People are gripped by the fear of these ghouls whose identities are masked in mystery. An ordinary college student named Kaneki encounters Rize, a girl who is an avid reader like he is, at the café he frequents. Little does Kaneki realize that his fate will change overnight.",
      "genres": [
        "action",
        "drama",
        "horror",
        "mystery",
        "psychological",
        "supernatural"
      ],
      "released": 2014,
      "status": "Completed",
      "otherName": "東京喰種-トーキョーグール-",
      "totalEpisodes": 12,
      "episodes": [
        {
          "id": "tokyo-ghoul-episode-1"
        },
        {
          "id": "tokyo-ghoul-episode-2"
        },
        {
          "id": "tokyo-ghoul-episode-3"
        },
        {
          "id": "tokyo-ghoul-episode-4"
        },
        {
          "id": "tokyo-ghoul-episode-5"
        },
        {
          "id": "tokyo-ghoul-episode-6"
        },
        {
          "id": "tokyo-ghoul-episode-7"
        },
        {
          "id": "tokyo-ghoul-episode-8"
        },
        {
          "id": "tokyo-ghoul-episode-9"
        },
        {
          "id": "tokyo-ghoul-episode-10"
        },
        {
          "id": "tokyo-ghoul-episode-11"
        },
        {
          "id": "tokyo-ghoul-episode-12"
        }
      ]
    },
  ]
}

api.recentReleaseEpisodes([page])


| Page From | Limit | |-----------|-------- | 1 | 257 |

// 20191206103924
// https://gogoanime.now.sh/api/v1/RecentReleaseEpisodes/1

{
  "anime": [
    {
      "title": "Wan Jie Xian Zong 2nd Season",
      "img": "https://cdnimg.xyz/cover/wan-jie-xian-zong-2nd-season.png",
      "synopsis": "Plot Summary: Second Season of Wonderland of Ten Thousands.\n\n",
      "genres": [
        "action",
        "adventure",
        "demons",
        "fantasy",
        "historical",
        "martial-arts",
        "romance"
      ],
      "category": "ona",
      "episode": 56,
      "totalEpisodes": 56,
      "released": 2019,
      "status": "Ongoing",
      "otherName": "Wonderland 2nd Season, The Wonderland of Ten Thousands 2, 万界仙踪 第2季",
      "servers": [
        {
          "name": "Vidstreaming",
          "iframe": "vidstreaming.io/streaming.php?id=MTM0NTk1&title=Wan+Jie+Xian+Zong+2nd+Season+Episode+56"
        },
        {
          "name": "Xstreamcdn",
          "iframe": "https://www.fembed.com/v/rywg2heplr76xqy"
        },
        {
          "name": "Vidcdn",
          "iframe": "vidstreaming.io/load.php?id=MTM0NTk1&title=Wan+Jie+Xian+Zong+2nd+Season+Episode+56"
        },
        {
          "name": "Mp4Upload",
          "iframe": "https://www.mp4upload.com/embed-q8d1ex59q2ki.html"
        }
      ]
    },
  ]
}

Iframe Decoder for url vidstreaming

If you don't want to directly load the video iframe in your application, you can use the decoder.

api.decodeVidstreamingIframeURL([iframe_url])

This decoder returns a list of videos type mp4 or m3u8. To play the m3u8 videos you would have to use some HLS player

  const iframe = 'vidstreaming.io/load.php?id=MTM0NTk1&title=Wan+Jie+Xian+Zong+2nd+Season+Episode+56';
  await api.decodeVidstreamingIframeURL(iframe)
    .then(urls =>{
      console.log(urls)
    });
[
  {
    option: 1,
    url: 'https://hls12xx.cdnfile.info/hls/9296cf197ecfe26b540cd67afd84dfa9/sub.56.m3u8'
  },
  {
    option: 2,
    url: 'https://st1.cdnfile.info/user1342/9296cf197ecfe26b540cd67afd84dfa9/EP.56.fullp.mp4?token=VOJQfydPCH9VHwRDkrVWpg&expires=1588377949&id=134595'
  }
]

api.recentlyAddedSeries()


// 20191206104022
// https://gogoanime.now.sh/api/v1/RecentlyAddedSeries

{
  "anime": [
    {
      "title": "Master Keaton",
      "img": "https://cdnimg.xyz/cover/master-keaton.png",
      "synopsis": "Plot Summary: Taichi Keaton is a half-British half-Japanese archeologist and SAS veteran of the Falklands War. He solves mysteries and investigates insurance fraud for Lloyd's around the world.\n",
      "genres": [
        "adventure",
        "drama",
        "historical",
        "mystery",
        "seinen",
        "slice-of-life"
      ],
      "released": 1998,
      "status": "Completed",
      "otherName": "Master Keaton: Blood and Bullets, マスターキートン",
      "totalEpisodes": 39,
      "episodes": [
        {
          "id": "master-keaton-episode-1"
        },
        {
          "id": "master-keaton-episode-2"
        },
        {
          "id": "master-keaton-episode-3"
        },
        {
          "id": "master-keaton-episode-4"
        },
        {
          "id": "master-keaton-episode-5"
        },
        {
          "id": "master-keaton-episode-6"
        },
        {
          "id": "master-keaton-episode-7"
        },
        {
          "id": "master-keaton-episode-8"
        },
        {
          "id": "master-keaton-episode-9"
        },
        {
          "id": "master-keaton-episode-10"
        },
        {
          "id": "master-keaton-episode-11"
        },
        {
          "id": "master-keaton-episode-12"
        },
        {
          "id": "master-keaton-episode-13"
        },
        {
          "id": "master-keaton-episode-14"
        },
        {
          "id": "master-keaton-episode-15"
        },
        {
          "id": "master-keaton-episode-16"
        },
        {
          "id": "master-keaton-episode-17"
        },
        {
          "id": "master-keaton-episode-18"
        },
        {
          "id": "master-keaton-episode-19"
        },
        {
          "id": "master-keaton-episode-20"
        },
        {
          "id": "master-keaton-episode-21"
        },
        {
          "id": "master-keaton-episode-22"
        },
        {
          "id": "master-keaton-episode-23"
        },
        {
          "id": "master-keaton-episode-24"
        },
        {
          "id": "master-keaton-episode-25"
        },
        {
          "id": "master-keaton-episode-26"
        },
        {
          "id": "master-keaton-episode-27"
        },
        {
          "id": "master-keaton-episode-28"
        },
        {
          "id": "master-keaton-episode-29"
        },
        {
          "id": "master-keaton-episode-30"
        },
        {
          "id": "master-keaton-episode-31"
        },
        {
          "id": "master-keaton-episode-32"
        },
        {
          "id": "master-keaton-episode-33"
        },
        {
          "id": "master-keaton-episode-34"
        },
        {
          "id": "master-keaton-episode-35"
        },
        {
          "id": "master-keaton-episode-36"
        },
        {
          "id": "master-keaton-episode-37"
        },
        {
          "id": "master-keaton-episode-38"
        },
        {
          "id": "master-keaton-episode-39"
        }
      ]
    },
  ]
}

api.alphabetList([letter] , [page])


| Letter | Page Limit | |-------------|------------- | '0' | (zero value means , numbers in the title) [1 .. 53] | | 'A' | [1 .. 4] |
| 'C' | [1 .. 3] | | 'D' | [1 .. 4] | | 'E' | [1 .. 1] | | 'F' | [1 .. 2] | | 'G' | [1 .. 3] | | 'H' | [1 .. 4] | | 'I' | [1 .. 2] | | 'J' | [1 .. 1] | | 'K' | [1 .. 4] | | 'L' | [1 .. 2] | | 'M' | [1 .. 4] | | 'N' | [1 .. 2] | | 'O' | [1 .. 2] | | 'P' | [1 .. 1] | | 'Q' | [1 .. 1] | | 'R' | [1 .. 2] | | 'S' | [1 .. 6] | | 'T' | [1 .. 4] | | 'U' | [1 .. 1] | | 'V' | [1 .. 1] | | 'W' | [1 .. 1] | | 'Z' | [1 .. 1] | | 'Y' | [1 .. 2] | | 'Z' | [1 .. 1] |

// 20191206104143
// https://gogoanime.now.sh/api/v1/Alphabet/a/1

{
  "anime": [
    {
      "title": "A Channel",
      "img": "https://cdnimg.xyz/images/anime/a-channel8.jpg",
      "synopsis": "Plot Summary: Toeru takes a test so she can enter the same high school as Run, the girl she likes. She passes, but when she goes   to tell Run, she finds her hugging a girl she’s never seen before.",
      "genres": [
        "comedy",
        "school",
        "seinen",
        "slice-of-life"
      ],
      "released": 2011,
      "status": "Completed",
      "otherName": "A-Channel: The Animation, Aチャンネル",
      "totalEpisodes": 12,
      "episodes": [
        {
          "id": "a-channel-episode-1"
        },
        {
          "id": "a-channel-episode-2"
        },
        {
          "id": "a-channel-episode-3"
        },
        {
          "id": "a-channel-episode-4"
        },
        {
          "id": "a-channel-episode-5"
        },
        {
          "id": "a-channel-episode-6"
        },
        {
          "id": "a-channel-episode-7"
        },
        {
          "id": "a-channel-episode-8"
        },
        {
          "id": "a-channel-episode-9"
        },
        {
          "id": "a-channel-episode-10"
        },
        {
          "id": "a-channel-episode-11"
        },
        {
          "id": "a-channel-episode-12"
        }
      ]
    },
  ]
}

api.popular([page])


| Page From | Limit | |-----------|-------- | 1 | 345 |

// 20191206104224
// https://gogoanime.now.sh/api/v1/Popular/1

{
  "popular": [
    {
      "title": "Arifureta Shokugyou de Sekai Saikyou",
      "img": "https://cdnimg.xyz/cover/arifureta-shokugyou-de-sekai-saikyou.png",
      "synopsis": "Plot Summary: Seventeen-year-old Hajime Nagumo is your average, everyday otaku. However, his simple life of pulling all-nighters and sleeping in school is suddenly turned upside down when he, along with the rest of his class, is summoned to a fantasy world! They're treated like heroes and tasked with the duty of saving the human race from utter extinction. But what should have been any otaku's wet dream quickly turns into Hajime's nightmare. While the rest of his class are blessed with godlike powers, Hajime's job, Synergist, only has a single transmutation skill. Ridiculed and bullied by his classmates for being weak, he soon finds himself in despair. Will he be able to survive in this dangerous world of monsters and demons with only a glorified blacksmith's level of strength?",
      "genres": [
        "action",
        "adventure",
        "fantasy",
        "harem"
      ],
      "released": 2019,
      "status": "Completed",
      "otherName": "Arifureta: From Commonplace to World's Strongest, ありふれた職業で世界最強",
      "totalEpisodes": 13,
      "episodes": [
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-1"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-2"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-3"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-4"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-5"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-6"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-7"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-8"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-9"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-10"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-11"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-12"
        },
        {
          "id": "arifureta-shokugyou-de-sekai-saikyou-episode-13"
        }
      ]
    },
  ]
} 

api.genres([genre] , [page])


| Genres | |-----------| | action , adventure | | cars , comedy | | dementia , demons , drama , dub | | ecchi | | fantasy | | game | | harem , historical , horror | | josei | | kids | | magic , martial-arts , mecha , military , music , mystery | | parody , police , psychological | | romance | | samurai , school , sci-fi , seinen , shoujo , shoujo-ai , shounen , shounen-ai , slice-of-life , space , orts , super-power , supernatural | | thriller | | vampire | | yaoi , yuri |

| Page From | Limit | |-----------|-------- | 1 | N/A |

// 20191206104423
// https://gogoanime.now.sh/api/v1/Genre/action/2

{
  "anime": [
    {
      "title": "Tenpou Ibun Ayakashi Ayashi Inferno OVA (Dub)",
      "img": "https://cdnimg.xyz/cover/tenpou-ibun-ayakashi-ayashi-inferno-ova-dub.png",
      "synopsis": "Plot Summary: Specials set six months after the end of Tenpou Ibun Ayakashi Ayashi.",
      "genres": [
        "action",
        "drama",
        "historical",
        "supernatural"
      ],
      "released": 2007,
      "status": "Completed",
      "otherName": "Ghost Slayers Ayashi: Inferno",
      "totalEpisodes": 5,
      "episodes": [
        {
          "id": "tenpou-ibun-ayakashi-ayashi-inferno-ova-dub-episode-1"
        },
        {
          "id": "tenpou-ibun-ayakashi-ayashi-inferno-ova-dub-episode-2"
        },
        {
          "id": "tenpou-ibun-ayakashi-ayashi-inferno-ova-dub-episode-3"
        },
        {
          "id": "tenpou-ibun-ayakashi-ayashi-inferno-ova-dub-episode-4"
        },
        {
          "id": "tenpou-ibun-ayakashi-ayashi-inferno-ova-dub-episode-5"
        }
      ]
    },
    {
      "title": "Strike the Blood II",
      "img": "https://cdnimg.xyz/cover/strike-the-blood-ii.png",
      "synopsis": "Plot Summary: Strike the Blood new OVAs",
      "genres": [
        "action",
        "ecchi",
        "fantasy",
        "school",
        "shounen",
        "supernatural",
        "vampire"
      ],
      "released": 2016,
      "status": "Completed",
      "otherName": "Strike the Blood Second, ストライク・ザ・ブラッドⅡ",
      "totalEpisodes": 8,
      "episodes": [
        {
          "id": "strike-the-blood-ii-episode-1"
        },
        {
          "id": "strike-the-blood-ii-episode-2"
        },
        {
          "id": "strike-the-blood-ii-episode-3"
        },
        {
          "id": "strike-the-blood-ii-episode-4"
        },
        {
          "id": "strike-the-blood-ii-episode-5"
        },
        {
          "id": "strike-the-blood-ii-episode-6"
        },
        {
          "id": "strike-the-blood-ii-episode-7"
        },
        {
          "id": "strike-the-blood-ii-episode-8"
        }
      ]
    },
  ]
}

api.ongoingSeries()


// 20191206104537
// https://gogoanime.now.sh/api/v1/OngoingSeries

{
  "anime": [
    {
      "title": "Actors: Songs Connection",
      "img": "https://cdnimg.xyz/cover/actors-songs-connection.png",
      "synopsis": "Plot Summary: Private Tenshou Gakuen is the seventh of ten school districts circled within a 130-meter tall wall with restricted entry and egress aside from officials. The academy is fully autonomous by the government but to strive for independence, the school allows students to engage in club activities after school, which comes with a strangely unique system. Each club is ranked according to its overall accumulated points gathered from various club activities and school events. Points can also be received by winning at the school's periodic Tenshou Gakuen Singing Contest, where many students compete. The members in the clubs work hard to win the contest for their goal.",
      "genres": [
        "music",
        "school"
      ],
      "released": 2019,
      "status": "Ongoing",
      "otherName": "ACTORS -Songs Connection-",
      "totalEpisodes": 9,
      "episodes": [
        {
          "id": "actors-songs-connection-episode-1"
        },
        {
          "id": "actors-songs-connection-episode-2"
        },
        {
          "id": "actors-songs-connection-episode-3"
        },
        {
          "id": "actors-songs-connection-episode-4"
        },
        {
          "id": "actors-songs-connection-episode-5"
        },
        {
          "id": "actors-songs-connection-episode-6"
        },
        {
          "id": "actors-songs-connection-episode-7"
        },
        {
          "id": "actors-songs-connection-episode-8"
        },
        {
          "id": "actors-songs-connection-episode-9"
        }
      ]
    },
    {
      "title": "Actors: Songs Connection (Dub)",
      "img": "https://cdnimg.xyz/cover/actors-songs-connection-dub.png",
      "synopsis": "Plot Summary: Private Tenshou Gakuen is the seventh of ten school districts circled within a 130-meter tall wall with restricted entry and egress aside from officials. The academy is fully autonomous by the government but to strive for independence, the school allows students to engage in club activities after school, which comes with a strangely unique system. Each club is ranked according to its overall accumulated points gathered from various club activities and school events. Points can also be received by winning at the school's periodic Tenshou Gakuen Singing Contest, where many students compete. The members in the clubs work hard to win the contest for their goal.\n",
      "genres": [
        "music",
        "school"
      ],
      "released": 2019,
      "status": "Ongoing",
      "otherName": "ACTORS -Songs Connection-",
      "totalEpisodes": 1,
      "episodes": [
        {
          "id": "actors-songs-connection-dub-episode-1"
        }
      ]
    },
    {
      "title": "Africa no Salaryman (TV)",
      "img": "https://cdnimg.xyz/cover/africa-no-salaryman-tv.png",
      "synopsis": "Plot Summary: The comedy follows a lion, toucan, and lizard as they live the lives of office workers in a capitalist society in Japan, while also dealing with their unique situations as animals living beyond the savanna and the food chain.",
      "genres": [
        "comedy",
        "slice-of-life"
      ],
      "released": 2019,
      "status": "Ongoing",
      "otherName": "Africa Salaryman, アフリカのサラリーマン (TV)",
      "totalEpisodes": 9,
      "episodes": [
        {
          "id": "africa-no-salaryman-tv-episode-1"
        },
        {
          "id": "africa-no-salaryman-tv-episode-2"
        },
        {
          "id": "africa-no-salaryman-tv-episode-3"
        },
        {
          "id": "africa-no-salaryman-tv-episode-4"
        },
        {
          "id": "africa-no-salaryman-tv-episode-5"
        },
        {
          "id": "africa-no-salaryman-tv-episode-6"
        },
        {
          "id": "africa-no-salaryman-tv-episode-7"
        },
        {
          "id": "africa-no-salaryman-tv-episode-8"
        },
        {
          "id": "africa-no-salaryman-tv-episode-9"
        }
      ]
    },
  ]
}

:busts_in_silhouette: Credits


:anger: Troubleshootings

This is just a personal project created for study / demonstration purpose and to simplify my working life, it may or may not be a good fit for your project(s).


:heart: Show your support

Please :star: this repository if you like it or this project helped you!
Feel free to open issues or submit pull-requests to help me improving my work.


:robot: Author

Chris Michael

You can follow me on github · twitter


Copyright © 2019 Chris Michael.