Cleansing New York’s filthy harbor, one oyster at a time

0
0
New York's secret weapon against big storms? Oysters


‘ : “http://version.cnn.com/”},a.getDefinedParams = serve as(n, e) go back e.clear out((serve as(e) go back n[e])).cut back((serve as(e, t) go back r(e, (serve as(e, t, n) t in e ? Object.defineProperty(e, t, worth: n,enumerable: !0,configurable: !0,writable: !0) : e[t] = n;go back e)(, t, n[t]))), ),a.isValidMediaTypes = serve as(e) var t = [“banner”, “native”, “video”];if (!Object.keys(e).each((serve as(e) go back (0,u.default)(t, e))))go back !1;if (e.video && e.video.context)go back (0,u.default)([“instream”, “outstream”], e.video.context);go back !0,a.getBidderRequest = serve as(e, t, n) {go back (0,o.default)(e, (serve as(e) go back 0 > t / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).exchange(/[018]/g, e),a.getBidIdParameter = serve as(e, t) go back t && t[e] ? t[e] : “http://version.cnn.com/”,a.tryAppendQueryString = serve as(e, t, n) go back n ? e + (t + “=”) + encodeURIComponent(n) + “&” : e,a.parseQueryStringParameters = serve as(e) var t = “http://version.cnn.com/”;for (var n in e)e.hasOwnProperty(n) && (t += n + “=” + encodeURIComponent(e[n]) + “&”);go back t,a.transformAdServerTargetingObj = serve as(t) go back t && 0 ‘;go back t += ‘‘,a.createTrackPixelIframeHtml = serve as(e) var t = !(1 n ‘) : “http://version.cnn.com/”,a.getIframeDocument = serve as(e) if (e) var t = void 0;take a look at t = e.contentWindow ? e.contentWindow.file : e.contentDocument.file ? e.contentDocument.file : e.contentDocument catch (e) a.logError(“Can’t get iframe file”, e)go back t,a.getValueString = serve as(e, t, n) go back null == t ? n : a.isStr(t) ? t : a.isNumber(t) ? t.toString() : void a.logWarn(“Unsuported kind for param: ” + e + ” required kind: String”);a.getHighestCpm = U(“timeToRespond”, (serve as(e, t) {go back t = u.syncsPerBidder)go back c.logWarn(‘Selection of person syncs exceeded for “http://version.cnn.com/” + t + “http://version.cnn.com/”‘);if (u.filterSettings) if (serve as(e, t) var n = u.filterSettings;if (serve as(e, t) if (e.all && e[t])go back c.logWarn(‘Detected presence of the “filterSettings.all” and “filterSettings.’ + t + “http://version.cnn.com/” in userSync config. You can’t combine “all” with “iframe/symbol” configs; they’re mutually unique.’),!1;var n = e.all ? e.all : e[t], r = e.all ? “all” : t;if (!n)go back !1;var i = n.clear out, o = n.bidders;if (i && “come with” !== i && “exclude” !== i)go back c.logWarn(‘UserSync “filterSettings.’ + r + “.clear out” environment “http://version.cnn.com/” + i + “http://version.cnn.com/” isn’t a legitimate possibility; use both ‘come with’ or ‘exclude’.”),!1;go back !!(“*” === o “http://version.cnn.com/” Array.isArray(o) && Zero n n n prebid.org wrappern n ” + (n ? “http://version.cnn.com/” : “http://version.cnn.com/”) + “n n n n “),ttlseconds: Quantity(e.ttl),23: serve as(e, t) var n = .toString;e.exports = serve as(e) go back n.name(e).slice(8, -1),24: serve as(e, t) e.exports = serve as(e) if (null == e)throw TypeError(“Cannot name way on ” + e);go back e,25: serve as(e, t, n) var r = n(60)(“wks”), i = n(62), o = n(19).Image, a = “serve as” == typeof o;(e.exports = serve as(e) go back r[e] “http://version.cnn.com/” (r[e] = a && o[e] “http://version.cnn.com/” (a ? o : i)(“Image.” + e))).retailer = r,26: serve as(e, t) e.exports = serve as() ,27: serve as(e, t, n) “use strict”;Object.defineProperty(t, “__esModule”, worth: !0),t.default = serve as(e) var t = e;go back callBids: serve as() ,setBidderCode: serve as(e) t = e,getBidderCode: serve as() go back t,28: serve as(e, t, n) {“use strict”;var r, i = n(7), o = (r = i) && r.__esModule ? r : default: r, a = (serve as(e) if (e && e.__esModule)go back e;var t = ;if (null != e)for (var n in e)Object.prototype.hasOwnProperty.name(e, n) && (t[n] = e[n]);go back t.default = e,t)(n(0));var d = , u = [“criteo”];serve as s(e, t) var n = file.createElement(“script”);n.kind = “textual content/javascript”,n.async = !0,t && “serve as” == typeof t && (n.readyState ? n.onreadystatechange = serve as() “loaded” !== n.readyState && “entire” !== n.readyState “http://version.cnn.com/” (n.onreadystatechange = null,t()): n.onload = serve as() t()),n.src = e;var r = file.getElementsByTagName(“head”);(r = r.duration ? r : file.getElementsByTagName(“frame”)).duration && (r = r[0]).insertBefore(n, r.firstChild)t.loadExternalScript = serve as(e, t) if (t && e)if ((0,o.default)(u, t)) if (!d[e]) a.logWarn(“module ” + t + ” is loading exterior JavaScript”);var n = file.createElement(“script”);n.kind = “textual content/javascript”,n.async = !0,n.src = e,a.insertElement(n),d[e] = !Zero else a.logError(t + ” now not whitelisted for loading exterior JavaScript”);else a.logError(“can’t load exterior script with out url and moduleCode”),t.loadScript = serve as(t, e, n) {t ? n ? d[t] ? e && “serve as” == typeof e && (d[t].loaded ? e() : d[t].callbacks.push(e)) : (d[t] = loaded: !1,callbacks: [],e && “serve as” == typeof e && d[t].callbacks.push(e),s(t, (serve as() d[t].loaded = !0;take a look at for (var e = 0; e t.max ? e : t), max: 0), p = (0,v.default)(e.buckets, (serve as(e) if (n > g.max * r) var t = e.precision;void 0 === t && (t = y),i = (e.max * r).toFixed(t) else if (n = e.min * r)go back e));go back p && (t = n,a = r,d = void 0 !== (o = p).precision ? o.precision : y,u = o.increment * a,s = o.min * a,c = Math.pow(10, d + 2),f = (t * c – s * c) / (u * c),l = Math.ground(f) * u + s,i = (l = Quantity(l.toFixed(10))).toFixed(d)),ifunction m(e) if (o.isEmpty(e) “http://version.cnn.com/” !e.buckets “http://version.cnn.com/” !Array.isArray(e.buckets))go back !1;var t = !0;go back e.buckets.forEach((serve as(e) void 0 !== e.min && e.max && e.increment “http://version.cnn.com/” (t = !1))),tt.getPriceBucketString = serve as(e, t) var n = 2 (0,S.timestamp)(),serve as(e) go back e && (e.standing && !(0,A.default)([C.BID_STATUS.BID_TARGETING_SET, C.BID_STATUS.RENDERED], e.standing) “http://version.cnn.com/” !e.standing));serve as U(e, n) var r = [], i = (0,S.groupBy)(e, “adUnitCode”);go back Object.keys(i).forEach((serve as(e) var t = (0,S.groupBy)(i[e], “bidderCode”);Object.keys(t).forEach((serve as(e) go back r.push(t[e].cut back(n)))))),rfunction u(n) {var g = ;serve as p(e) go back “string” == typeof e ? [e] : w.isArray(e) ? e : n.getAdUnitCodes() “http://version.cnn.com/” []serve as v() go back U(n.getBidsReceived().clear out((serve as(e) go back “banner” !== e.mediaType “http://version.cnn.com/” (0,a.sizeSupported)([e.width, e.height]))).clear out(d).clear out(t.isBidNotExpired), S.getOldestHighestCpmBid)serve as y() go back n.getStandardBidderAdServerTargeting().map((serve as(e) go back e.key)).concat(R).clear out(S.uniques)serve as m(r, i, e, t) go back Object.keys(i.adserverTargeting).clear out(o()).forEach((serve as(e) var t, n;r.duration && r.clear out((n = e,serve as(e) go back e.adUnitCode === i.adUnitCode && e.adserverTargeting[n])).forEach((t = e,serve as(e) w.isArray(e.adserverTargeting[t]) “http://version.cnn.com/” (e.adserverTargeting[t] = [e.adserverTargeting[t]]),e.adserverTargeting[t] = e.adserverTargeting[t].concat(i.adserverTargeting[t]).clear out(S.uniques),delete i.adserverTargeting[t])))),r.push(i),rfunction o() var t = y();go back serve as(e) go back -1 === t.indexOf(e)serve as b(t) go back _(, t.adUnitCode, Object.keys(t.adserverTargeting).clear out(o()).map((serve as(e) go back _(, e.substring(0, O), [t.adserverTargeting[e]]))))go back g.resetPresetTargeting = serve as(e) {if ((0,S.isGptPubadsDefined)()) var t = p(e), r = n.getAdUnits().clear out((serve as(e) go back (0,A.default)(t, e.code)));window.googletag.pubads().getSlots().forEach((serve as(n) B.forEach((serve as(t) r.forEach((serve as(e) e.code !== n.getAdUnitPath() && e.code !== n.getSlotElementId() “http://version.cnn.com/” n.setTargeting(t, null)))))))},g.getAllTargeting = serve as(e) var r, t, i, n, o, a, d, u, s, c = 1 i && (r = !1)),!r)),r && e.run(),r}serve as u(e, t) void 0 === e[t] ? e[t] = 1 : e[t]++},addWinningBid: serve as(e) o = o.concat(e),R.callBidWonBidder(e.bidder, e, f),setBidTargeting: serve as(e) R.callSetTargetingBidder(e.bidder, e),getWinningBids: serve as() go back o,getTimeout: serve as() go back E,getAuctionId: serve as() go back m,getAuctionStatus: serve as() go back b,getAdUnits: serve as() go back s,getAdUnitCodes: serve as() go back l,getBidRequests: serve as() go back g,getBidsReceived: serve as() go back p}},t.auctionCallbacks = W,t.getStandardBidderSettings = d,t.getKeyValueTargetingPairs = V,t.adjustBids = s;var _ = n(0), h = n(31), i = n(17), S = n(228), E = n(12), w = n(3), r = n(18), o = n(20), T = a(n(10)), C = a(n(7)), A = n(41);serve as a(e) go back e && e.__esModule ? e : default: evar B = r.userSync.syncUsers, O = n(0), R = n(8), U = n(9), N = n(4), D = t.AUCTION_STARTED = “began”, j = t.AUCTION_IN_PROGRESS = “inProgress”, P = t.AUCTION_COMPLETED = “finished”;U.on(N.EVENTS.BID_ADJUSTMENT, (serve as(e) s(e)));var okay = 4, x = , M = , G = [];var q = t.addBidResponse = (0,o.createHook)(“asyncSeries”, (serve as(e, t) this.auctionAddBidResponse(e, t)), “addBidResponse”);serve as W(e, p) {var v = 0, t = !1, n = (0,_.delayExecution)((serve as() t = !0), p.getBidRequests().duration);serve as y() v–,t && 0 === v && e()go back {addBidResponse: serve as(e, t) v++;var n = p.getBidRequests(), r = p.getAuctionId(), i = (0,_.getBidderRequest)(n, t.bidderCode, e), o = (serve as(e) var t = e.adUnitCode, n = e.bid, r = e.bidRequest, i = e.auctionId, o = r.get started, a = b(, n, auctionId: i,responseTimestamp: (0,_.timestamp)(),requestTimestamp: o,cpm: parseFloat(n.cpm) “http://version.cnn.com/” 0,bidder: n.bidderCode,adUnitCode: t);a.timeToRespond = a.responseTimestamp – a.requestTimestamp,U.emit(N.EVENTS.BID_ADJUSTMENT, a);var d = r.bids && (0,T.default)(r.bids, (serve as(e) go back e.adUnitCode == t)), u = d && d.renderer;u && u.url && (a.renderer = E.Renderer.set up(url: u.url),a.renderer.setRender(u.render));var s, c = w.config.getConfig(“mediaTypePriceGranularity.” + n.mediaType), f = (0,h.getPriceBucketString)(a.cpm, “object” === (void 0 === c ? “undefined” : m(c)) ? c : w.config.getConfig(“customPriceBucket”), w.config.getConfig(“foreign money.granularityMultiplier”));go back a.pbLg = f.low,a.pbMg = f.med,a.pbHg = f.top,a.pbAg = f.auto,a.pbDg = f.dense,a.pbCg = f.customized,a.bidderCode && (0 e.getTimeout() + w.config.getConfig(“timeoutBuffer”) && e.executeCallback(!0)serve as z(e, t) U.emit(N.EVENTS.BID_RESPONSE, t),e.addBidReceived(t),I(e, t)serve as d(e) var t = w.config.getConfig(“mediaTypePriceGranularity.” + e), n = “string” == typeof e && t ? “string” == typeof t ? t : “customized” : w.config.getConfig(“priceGranularity”), r = pbjs.bidderSettings;go back r[N.JSON_MAPPING.BD_SETTING_STANDARD] “http://version.cnn.com/” (r[N.JSON_MAPPING.BD_SETTING_STANDARD] = ),r[N.JSON_MAPPING.BD_SETTING_STANDARD][N.JSON_MAPPING.ADSERVER_TARGETING] “http://version.cnn.com/” (r[N.JSON_MAPPING.BD_SETTING_STANDARD][N.JSON_MAPPING.ADSERVER_TARGETING] = [key: N.TARGETING_KEYS.BIDDER,val: function(e) return e.bidderCode, key: N.TARGETING_KEYS.AD_ID,val: function(e) return e.adId, key: N.TARGETING_KEYS.PRICE_BUCKET,val: function(e) return n === N.GRANULARITY_OPTIONS.AUTO ? e.pbAg : n === N.GRANULARITY_OPTIONS.DENSE ? e.pbDg : n === N.GRANULARITY_OPTIONS.LOW ? e.pbLg : n === N.GRANULARITY_OPTIONS.MEDIUM ? e.pbMg : n === N.GRANULARITY_OPTIONS.HIGH ? e.pbHg : n === N.GRANULARITY_OPTIONS.CUSTOM ? e.pbCg : void 0, key: N.TARGETING_KEYS.SIZE,val: function(e) return e.size, key: N.TARGETING_KEYS.DEAL,val: function(e) return e.dealId, key: N.TARGETING_KEYS.SOURCE,val: function(e) return e.source, key: N.TARGETING_KEYS.FORMAT,val: function(e) return e.mediaType]),r[N.JSON_MAPPING.BD_SETTING_STANDARD]serve as V(e, t) if (!t)go back ;var n = , r = pbjs.bidderSettings;r && (u(n, d(t.mediaType), t),e && r[e] && r[e][N.JSON_MAPPING.ADSERVER_TARGETING] && (u(n, r[e], t),t.sendStandardTargeting = r[e].sendStandardTargeting));go back t.local && (n = b(, n, (0,i.getNativeTargeting)(t))),nfunction u(r, i, o) var e = i[N.JSON_MAPPING.ADSERVER_TARGETING];go back o.dimension = o.getSize(),O._each(e, (serve as(e) var t = e.key, n = e.val;if (r[t] && O.logWarn(“The important thing: ” + t + ” is getting ovewritten”),O.isFn(n))take a look at n = n(o) catch (e) O.logError(“bidmanager”, “ERROR”, e)(void 0 === i.suppressEmptyKeys “http://version.cnn.com/” !0 !== i.suppressEmptyKeys) && t !== N.TARGETING_KEYS.DEAL “http://version.cnn.com/” !O.isEmptyStr(n) && null != n ? r[t] = n : O.logInfo(“suppressing empty key “http://version.cnn.com/” + t + “http://version.cnn.com/” from adserver focused on”))),rfunction s(e) var t = e.bidderCode, n = e.cpm, r = void 0;if (pbjs.bidderSettings && (t && pbjs.bidderSettings[t] && “serve as” == typeof pbjs.bidderSettings[t].bidCpmAdjustment ? r = pbjs.bidderSettings[t].bidCpmAdjustment : pbjs.bidderSettings[N.JSON_MAPPING.BD_SETTING_STANDARD] && “serve as” == typeof pbjs.bidderSettings[N.JSON_MAPPING.BD_SETTING_STANDARD].bidCpmAdjustment && (r = pbjs.bidderSettings[N.JSON_MAPPING.BD_SETTING_STANDARD].bidCpmAdjustment),r))take a look at n = r(e.cpm, b(, e)) catch (e) O.logError(“Error throughout bid adjustment”, “bidmanager.js”, e)0 (eg mediaTypes.banner.sizes).”), e.sizes = n);if (t && t.video) var i = t.video;if (i.playerSize)if (Array.isArray(i.playerSize) && 1 === i.playerSize.duration && i.playerSize.each(d)) e.sizes = i.playerSize;else if (d(i.playerSize)) var o = [];o.push(i.playerSize),w.logInfo(“Reworking video.playerSize from ” + i.playerSize + ” to ” + o + ” so it is in the correct layout.”),e.sizes = i.playerSize = o else w.logError(“Detected mistaken configuration of mediaTypes.video.playerSize. Please specify just one set of dimensions in a layout like: [[640, 480]]. Putting off invalid mediaTypes.video.playerSize assets from request.”), delete e.mediaTypes.video.playerSizeif (t && t.local) var a = t.local;a.symbol && a.symbol.sizes && !Array.isArray(a.symbol.sizes) && (w.logError(“Please use an array of sizes for local.symbol.sizes box. Putting off invalid mediaTypes.local.symbol.sizes assets from request.”),delete e.mediaTypes.local.symbol.sizes),a.symbol && a.symbol.aspect_ratios && !Array.isArray(a.symbol.aspect_ratios) && (w.logError(“Please use an array of sizes for local.symbol.aspect_ratios box. Putting off invalid mediaTypes.local.symbol.aspect_ratios assets from request.”),delete e.mediaTypes.local.symbol.aspect_ratios),a.icon && a.icon.sizes && !Array.isArray(a.icon.sizes) && (w.logError(“Please use an array of sizes for local.icon.sizes box. Putting off invalid mediaTypes.local.icon.sizes assets from request.”),delete e.mediaTypes.local.icon.sizes))),e,h.callBids = serve as(e, t, r, i, o, a) {if (t.duration) {var n = t.cut back((serve as(e, t) go back e[Number(void 0 !== t.src && t.src === C.S2S.SRC)].push(t),e), [[], []]), d = b(n, 2), u = d[0], s = d[1];if (s.duration) {var c = (0,E.ajaxBuilder)(a, o ? request: o.request.bind(null, “s2s”),achieved: o.achieved : void 0), f = U.bidders, l = R[U.adapter], g = s[0].tid, p = s[0].adUnitsS2SCopy;if (l) var v = tid: g,ad_units: p;if (v.ad_units.duration) var y = s.map((serve as(e) go back e.get started = (0,S.timestamp)(),i)), m = v.ad_units.cut back((serve as(e, t) go back e.concat((t.bids “http://version.cnn.com/” []).cut back((serve as(e, t) go back e.concat(t.bidder)), []))), []);w.logMessage(“CALLING S2S HEADER BIDDERS ==== ” + f.clear out((serve as(e) go back (0,A.default)(m, e))).sign up for(“,”)),s.forEach((serve as(e) B.emit(C.EVENTS.BID_REQUESTED, e))),l.callBids(v, s, r, (serve as() go back y.forEach((serve as(e) go back e()))), c)}u.forEach((serve as(e) e.get started = (0,S.timestamp)();var t = R[e.bidderCode];w.logMessage(“CALLING BIDDER ======= ” + e.bidderCode),B.emit(C.EVENTS.BID_REQUESTED, e);var n = (e.doneCbCallCount = 0,E.ajaxBuilder)(a, o ? request: o.request.bind(null, e.bidderCode),achieved: o.achieved : void 0);t.callBids(e, r, i, n)))} else w.logWarn(“callBids carried out with out a bidRequests. Have been they filtered by means of labels or sizing?”)},h.videoAdapters = [],h.registerBidAdapter = serve as(e, t) var n = (2 n

<![CDATA[inDapIF=true;]]>

n

nx3c!– Rubicon Undertaking Advert Tag –x3en

n<![CDATA[" + i + "n]]>

n

n

“);var a = g[r.size_id].cut up(“x”).map((serve as(e) go back Quantity(e))), s = u(a, 2);o.width = s[0],o.top = s[1]o.rubiconTargeting = (Array.isArray(r.focused on) ? r.focused on : []).cut back((serve as(e, r) go back e[r.key] = r.values[0],e), rpfl_elemid: n.adUnitCode),e.push(o)} else l.logError(“Rubicon bid adapter Error: bidRequest undefined at index place:” + t, c, d);go back e}), []).type((serve as(e, r) go back (r.cpm “http://version.cnn.com/” 0) – (e.cpm “http://version.cnn.com/” 0)))},getUserSyncs: serve as(e, r, t) if (!A && e.iframeEnabled) var i = “http://version.cnn.com/”;go back t && “string” == typeof t.consentString && (“boolean” == typeof t.gdprApplies ? i += “?gdpr=” + Quantity(t.gdprApplies) + “&gdpr_consent=” + t.consentString : i += “?gdpr_consent=” + t.consentString),A = !0,kind: “iframe”,url: n + i,transformBidParams: serve as(e, r) go back l.convertTypes(accountId: “quantity”,siteId: “quantity”,zoneId: “quantity”, e)};serve as m() go back [window.screen.width, window.screen.height].sign up for(“x”)serve as b(e, r) var t = f.config.getConfig(“pageUrl”);go back e.params.referrer ? t = e.params.referrer : t “http://version.cnn.com/” (t = r.refererInfo.referer),e.params.safe ? t.exchange(/^http:/i, “https:”) : tfunction _(e, r) {var t = e.params;if (“video” === r) {var i = [];go back t.video && t.video.playerWidth && t.video.playerHeight ? i = [t.video.playerWidth, t.video.playerHeight] : Array.isArray(l.deepAccess(e, “mediaTypes.video.playerSize”)) && 1 === e.mediaTypes.video.playerSize.duration ? i = e.mediaTypes.video.playerSize[0] : Array.isArray(e.sizes) && 0 <![CDATA[/*Keypresshttps://dmauro.github.io/Keypress/*/(serve as() {var d, j, a, okay, e, h, l, o, p, m, t, u, f, b, i, x, r, v, g, s, w, q, n = .hasOwnProperty, c = [].indexOf "http://version.cnn.com/" serve as(A) for (var z = 0, y = this.duration; z < y; z++) if (z on this && this[z] === A) go back zreturn -1;p = is_unordered: false,is_counting: false,is_exclusive: false,is_solitary: false,prevent_default: false,prevent_repeat: false;w = ["meta", "alt", "option", "ctrl", "shift", "cmd"];g = "ctrl";j = ;j.debug = false;d = (serve as() serve as y(B) var A, z;for (A in B) if (!n.name(B, A)) continuez = B[A];if (z !== false) this[A] = zthis.keys = this.keys "http://version.cnn.com/" [];this.rely = this.rely "http://version.cnn.com/" 0y.prototype.allows_key_repeat = serve as() go back !this.prevent_repeat && typeof this.on_keydown === "serve as";y.prototype.reset = serve as() this.rely = 0;go back this.keyup_fired = null;go back y)();j.Listener = (serve as() {serve as y(z, D) {var A, C, B;if ((typeof jQuery !== "undefined" && jQuery !== null) && z instanceof jQuery) if (z.duration !== 1) v("Caution: your jQuery selector must have precisely one object.")z = z[0]this.should_suppress_event_defaults = false;this.should_force_event_defaults = false;this.sequence_delay = 800;this._registered_combos = [];this._keys_down = [];this._active_combos = [];this._sequence = [];this._sequence_timer = null;this._prevent_capture = false;this._defaults = D "http://version.cnn.com/" ;for (C in p) if (!n.name(p, C)) continueB = p[C];this._defaults[C] = this._defaults[C] "http://version.cnn.com/" Bthis.part = z "http://version.cnn.com/" file.frame;A = serve as(G, F, E) if (G.addEventListener) G.addEventListener(F, E) else if (G.attachEvent) G.attachEvent("on" + F, E)go back E;this.keydown_event = A(this.part, "keydown", (serve as(E) go back serve as(F) F = F "http://version.cnn.com/" window.tournament;E._receive_input(F, true);go back E._bug_catcher(F))(this));this.keyup_event = A(this.part, "keyup", (serve as(E) go back serve as(F) F = F "http://version.cnn.com/" window.tournament;go back E._receive_input(F, false))(this));this.blur_event = A(window, "blur", (serve as(E) go back serve as() var G, I, F, H;H = E._keys_down;for (I = 0,F = H.duration; I = 0 && ((z = h(A.keyCode)) !== “cmd” && z !== “shift” && z !== “alt” && z !== “caps” && z !== “tab”)) go back this._receive_input(A, false);y.prototype._cmd_bug_check = serve as(z) if (g === “cmd” && c.name(this._keys_down, “cmd”) >= 0 && c.name(z, “cmd”) = 0) returnif (!(D.is_solitary “http://version.cnn.com/” !C._cmd_bug_check(D.keys))) go back B.push(D))(this));go back B;y.prototype._get_potential_combos = serve as(B) var E, z, D, A, C;z = [];C = this._registered_combos;for (D = 0,A = C.duration; D = 0 && this._cmd_bug_check(E.keys)) z.push(E)go back z;y.prototype._add_to_active_combos = serve as(A) {var O, B, D, N, L, J, E, Okay, H, G, C, M, z, I, F;Okay = false;E = true;N = false;if (c.name(this._active_combos, A) >= 0) go back true else {if (this._active_combos.duration) {for (J = H = 0,I = this._active_combos.duration; 0 <= I ? H I; J = 0 <= I ? ++H : –H) O = this._active_combos[J];if (!(O && O.is_exclusive && A.is_exclusive)) continueD = O.keys;if (!Okay) for (G = 0,M = D.duration; G < M; G++) B = D[G];Okay = true;if (c.name(A.keys, B) < 0) Okay = false;breakif (E && !Okay) F = A.keys;for (C = 0,z = F.duration; C < z; C++) L = F[C];E = false;if (c.name(D, L) < 0) E = true;breakif (Okay) if (N) O = this._active_combos.splice(J, 1)[0];if (O != null) O.reset() else O = this._active_combos.splice(J, 1, A)[0];if (O != null) O.reset()N = trueE = false}}if (E) this._active_combos.unshift(A)go back Okay "http://version.cnn.com/" E};y.prototype._remove_from_active_combos = serve as(D) var A, z, C, B;for (z = C = 0,B = this._active_combos.duration; 0 <= B ? C B; z = 0 <= B ? ++C : –C) A = this._active_combos[z];if (A === D) D = this._active_combos.splice(z, 1)[0];D.reset();smash;y.prototype._get_possible_sequences = serve as() {var z, I, G, Okay, J, D, F, E, B, L, H, C, A;J = [];H = this._registered_combos;for (F = 0,L = H.duration; F < L; F++) z = H[F];for (G = E = 1,C = this._sequence.duration; 1 <= C ? E = C; G = 1 <= C ? ++E : –E) D = this._sequence.slice(-G);if (!z.is_sequence) continueif (c.name(z.keys, "shift") < 0) D = m(D, serve as(M) go back M !== "shift");if (!D.duration) continuefor (I = B = 0,A = D.duration; 0 <= A ? B A; I = 0 <= A ? ++B : –B) if (z.keys[I] === D[I]) Okay = true else Okay = false;breakif (Okay) J.push(z)go back J};y.prototype._add_key_to_sequence = serve as(A, E) var D, B, C, z;this._sequence.push(A);B = this._get_possible_sequences();if (B.duration) for (C = 0,z = B.duration; C -1) this._sequence_timer = setTimeout(serve as() go back this._sequence = [], this.sequence_delay) else this._sequence = [];y.prototype._get_sequence = serve as(M) {var z, I, G, J, Okay, E, F, D, B, L, H, C, A;H = this._registered_combos;for (F = 0,L = H.duration; F < L; F++) {z = H[F];if (!z.is_sequence) continuefor (G = D = 1,C = this._sequence.duration; 1 <= C ? D = C; G = 1 = 0) go back truereturn N !== “shift”)).slice(-G);if (z.keys.duration !== E.duration) continuefor (I = B = 0,A = E.duration; 0 <= A ? B A; I = 0 <= A ? ++B : –B) Okay = E[I];if (c.name(z.keys, "shift") < 0) if (Okay === "shift") continueif (M === "shift" && c.name(z.keys, "shift") < 0) continueif (z.keys[I] === Okay) J = true else J = false;breakif (J) ;if (z.is_exclusive) this._sequence = []go back z}go back false};y.prototype._receive_input = serve as(A, B) z === g)) returnif (!z) returnif (B) go back this._key_down(z, A) else go back this._key_up(z, A);y.prototype._fire = serve as(B, C, z, A) if (typeof C["on_" + B] === "serve as") this._prevent_default(z, C["on_" + B].name(C["this"], z, C.rely, A) !== true)if (B === "free up") C.rely = 0if (B === "keyup") go back C.keyup_fired = true;y.prototype._match_combo_arrays = serve as(A, C) var z, E, B, D;D = this._registered_combos;for (E = 0,B = D.duration; E < B; E++) z = D[E];if ((!z.is_unordered && e(A, z.keys)) "http://version.cnn.com/" (z.is_unordered && okay(A, z.keys))) C(z);y.prototype._fuzzy_match_combo_arrays = serve as(A, C) var z, E, B, D;D = this._registered_combos;for (E = 0,B = D.duration; E < B; E++) z = D[E];if ((!z.is_unordered && f(z.keys, A)) "http://version.cnn.com/" (z.is_unordered && u(z.keys, A))) C(z);y.prototype._keys_remain = serve as(E) var A, D, C, z, B;B = E.keys;for (C = 0,z = B.duration; C = 0) D = true;breakreturn D;y.prototype._key_down = serve as(N, J) {var C, P, z, H, Okay, A, M, I, O, F, E, D, L, B, G;O = l(N, J);if (O) N = Othis._add_key_to_sequence(N, J);I = this._get_sequence(N);if (I) this._fire(“keydown”, I, J)for (Okay in s) z = s[K];if (!J[z]) continueif (Okay === N “http://version.cnn.com/” c.name(this._keys_down, Okay) >= 0) continuethis._keys_down.push(Okay)for (Okay in s) z = s[K];if (Okay === N) continueif (c.name(this._keys_down, Okay) >= 0 && !J[z]) if (Okay === “cmd” && g !== “cmd”) continuefor (H = F = 0,G = this._keys_down.duration; 0 <= G ? F G; H = 0 <= G ? ++F : –F) if (this._keys_down[H] === Okay) this._keys_down.splice(H, 1)P = this._get_active_combos(N);M = this._get_potential_combos(N);for (E = 0,L = P.duration; E < L; E++) C = P[E];this._handle_combo_down(C, M, N, J)if (M.duration) for (D = 0,B = M.duration; D < B; D++) A = M[D];this._prevent_default(J, A.prevent_default)if (c.name(this._keys_down, N) < 0) this._keys_down.push(N)};y.prototype._handle_combo_down = serve as(A, G, H, D) var C, z, E, I, B, F;if (c.name(A.keys, H) = 0) C = true;if (!A.allows_key_repeat()) go back falseI = this._add_to_active_combos(A, H);A.keyup_fired = false;z = false;if (A.is_exclusive) for (B = 0,F = G.duration; B A.keys.duration) z = true;breakif (!z) if (A.is_counting && typeof A.on_keydown === “serve as”) A.rely += 1if (I) go back this._fire(“keydown”, A, D, C);y.prototype._key_up = serve as(T, O) var L, Okay, P, G, N, J, M, H, D, B, A, z, Q, S, R, I, F, E, C;H = T;M = l(T, O);if (M) T = MM = r[H];if (O.shiftKey) if (!(M && c.name(this._keys_down, M) >= 0)) T = H else if (!(H && c.name(this._keys_down, H) >= 0)) T = MJ = this._get_sequence(T);if (J) this._fire(“keyup”, J, O)if (c.name(this._keys_down, T) < 0) go back falsefor (N = D = 0,I = this._keys_down.duration; 0 <= I ? D I; N = 0 <= I ? ++D : –D) if ((F = this._keys_down[N]) === T "http://version.cnn.com/" F === M "http://version.cnn.com/" F === H) this._keys_down.splice(N, 1);breakK = this._active_combos.duration;G = [];E = this._active_combos;for (B = 0,Q = E.duration; B = 0) G.push(L)for (A = 0,S = G.duration; A 1) C = this._active_combos;for (z = 0,R = C.duration; z = 0) continueif (!this._keys_remain(L)) this._remove_from_active_combos(L);y.prototype._handle_combo_up = serve as(D, C, z) var A, B;this._prevent_default(C, D && D.prevent_default);B = this._keys_remain(D);if (!D.keyup_fired) A = this._keys_down.slice();A.push(z);if (!D.is_solitary “http://version.cnn.com/” okay(A, D.keys)) this._fire(“keyup”, D, C);if (D.is_counting && typeof D.on_keyup === “serve as” && typeof D.on_keydown !== “serve as”) D.rely += 1if (!B) this._fire(“free up”, D, C);this._remove_from_active_combos(D);y.prototype.simple_combo = serve as(z, A) go back this.register_combo(keys: z,on_keydown: A);y.prototype.counting_combo = serve as(A, z) go back this.register_combo(keys: A,is_counting: true,is_unordered: false,on_keydown: z);y.prototype.sequence_combo = serve as(z, A) go back this.register_combo(keys: z,on_keydown: A,is_sequence: true,is_exclusive: true);y.prototype.register_combo = serve as(D) var C, B, A, z;if (typeof D.keys === “string”) D.keys = D.keys.cut up(“http://version.cnn.com/”)z = this._defaults;for (B in z) if (!n.name(z, B)) continueA = z[B];if (D[B] === void 0) D[B] = AC = new d(D);if (q(C)) this._registered_combos.push(C);go back C;y.prototype.register_many = serve as(D) var C, B, A, z;z = [];for (B = 0,A = D.duration; B < A; B++) C = D[B];z.push(this.register_combo(C))go back z;y.prototype.unregister_combo = serve as(C) {var F, z, E, B, D, A;if (!C) go back falsez = (serve as(G) go back serve as(L) var I, Okay, J, H;H = [];for (I = Okay = 0,J = G._registered_combos.duration; 0 <= J ? Okay J; I = 0 <= J ? ++Okay : –Okay) if (L === G._registered_combos[I]) G._registered_combos.splice(I, 1);smash else H.push(void 0)go back H)(this);if (C instanceof d) go back z(C) else if (typeof C === "string") C = C.cut up("http://version.cnn.com/")D = this._registered_combos;A = [];for (E = 0,B = D.duration; E < B; E++) F = D[E];if (F == null) continueif ((F.is_unordered && okay(C, F.keys)) "http://version.cnn.com/" (!F.is_unordered && e(C, F.keys))) A.push(z(F)) else A.push(void 0)go back A};y.prototype.unregister_many = serve as(D) var C, B, A, z;z = [];for (B = 0,A = D.duration; B < A; B++) C = D[B];z.push(this.unregister_combo(C))go back z;y.prototype.get_registered_combos = serve as() go back this._registered_combos;y.prototype.reset = serve as() go back this._registered_combos = [];y.prototype.concentrate = serve as() go back this._prevent_capture = false;y.prototype.stop_listening = serve as() go back this._prevent_capture = true;y.prototype.get_meta_key = serve as() go back g;go back y})();o = serve as() if (navigator.userAgent.indexOf("Mac OS X") !== -1) g = "cmd";a = serve as() if (navigator.userAgent.indexOf("Opera") !== -1) x["17"] = "cmd";h = serve as(y) go back x[y];m = serve as(A, z) {var y;if (A.clear out) go back A.clear out(z) else go back (serve as() var D, C, B;B = [];for (D = 0,C = A.duration; D < C; D++) y = A[D];if (z(y)) B.push(y)go back B)()};okay = serve as(A, y) var B, C, z;if (A.duration !== y.duration) go back falsefor (C = 0,z = A.duration; C = 0) continuereturn falsereturn true;e = serve as(z, y) var A, C, B;if (z.duration !== y.duration) go back falsefor (A = C = 0,B = z.duration; 0 <= B ? C B; A = 0 <= B ? ++C : –C) if (z[A] !== y[A]) go back falsereturn true;u = serve as(A, y) var B, C, z;for (C = 0,z = A.duration; C < z; C++) B = A[C];if (c.name(y, B) < 0) go back falsereturn true;t = Array.prototype.indexOf "http://version.cnn.com/" serve as(y, A) var z, C, B;for (z = C = 0,B = y.duration; 0 <= B ? C = B; z = 0 <= B ? ++C : –C) if (y[z] === A) go back zreturn -1;f = serve as(A, y) var B, D, C, E, z;C = 0;for (E = 0,z = A.duration; E = C) C = B else go back falsereturn true;v = serve as() if (j.debug) go back console.log.practice(console, arguments);b = serve as(z) var A, B, y;A = false;for (y in x) B = x[y];if (z === B) A = true;breakif (!A) for (y in r) B = r[y];if (z === B) A = true;breakreturn A;q = serve as(A) var H, G, N, I, Okay, M, z, L, E, D, B, J, y, F, C;z = true;if (!A.keys.duration) v(“You are looking to bind a combo with out a keys:”, A)for (G = E = 0,F = A.keys.duration; 0 <= F ? E F; G = 0 <= F ? ++E : –E) N = A.keys[G];H = i[N];if (H) N = A.keys[G] = Hif (N === "meta") A.keys.splice(G, 1, g)if (N === "cmd") v('Caution: use the "meta" key quite than "cmd" for Home windows compatibility')C = A.keys;for (D = 0,J = C.duration; D = 0 “http://version.cnn.com/” c.name(A.keys, “cmd”) >= 0) Okay = A.keys.slice();for (B = 0,y = w.duration; B -1) Okay.splice(G, 1)if (Okay.duration > 1) v(“META and CMD key combinations can’t have greater than 1 non-modifier keys”, A, Okay);z = falsefor (M in A) L = A[M];if (p[M] === “undefined”) v(“The valuables ” + M + ” isn’t a legitimate combo assets. Your combo has nonetheless been registered.”)go back z;l = serve as(z, A) var y;if (!A.shiftKey) go back falsey = r[z];if (y != null) go back yreturn false;s = cmd: “metaKey”,ctrl: “ctrlKey”,shift: “shiftKey”,alt: “altKey”;i = get away: “esc”,keep watch over: “ctrl”,command: “cmd”,”smash”: “pause”,home windows: “cmd”,possibility: “alt”,caps_lock: “caps”,apostrophe: “http://version.cnn.com/””,semicolon: “;”,tilde: “~”,accessory: “`”,scroll_lock: “scroll”,num_lock: “num”;r = “/”: “?”,”.”: “>”,”,”: “

Up to date 2339 GMT (0739 HKT) January 16, 2019

Chat with us in Fb Messenger. To find out what is taking place on the earth because it unfolds.

The Billion Oyster Undertaking has labored since 2014 to rebuild oyster reefs within the waters surrounding New York Town. The creatures are herbal purifiers: A unmarried grownup oyster can cleanse about 50 gallons of water in keeping with day. And their reefs can give a habitat for different marine lifestyles and assist give protection to New York’s shores in opposition to hurricane surge throughout tough climate.

The gang has up to now restored about 30 million oysters to native waters. However that is nonetheless a tiny fraction of what used to thrive within the space.

“With out the oyster reefs, the entire coastline is basically modified,” the crowd’s govt director, Pete Malinowski, advised CNN Industry’ Rachel Crane. “We expect oyster reefs will also be a part of an built-in strategy to resiliency and proactive making plans for local weather exchange.”

Malinowski mentioned his workforce is seeing promising indicators. Remaining 12 months, there used to be a “dramatic” build up within the selection of wild oysters that latched directly to Billion Oyster Initiatives’ reefs.

“For recovery to achieve success, you want the recruitment of untamed oysters from the gadget,” Malinowski mentioned. It might assist the inhabitants develop exponentially.

Like the crowd’s title implies, it hopes to in the future go back a thousand million oysters to New York’s waterways.

The way it works

Billion Oyster Undertaking companions with greater than 70 eating places in New York Town. The companies save up their oyster shells quite than tossing them, and volunteers for the Billion Oyster Undertaking spherical them up and cart them off to Governors Island, a small island due east of the Statue of Liberty.

The shells are then left out of doors for a minimum of a 12 months. This permits the weather to naturally cleanse them of natural topic sooner than they’re despatched to the the New York Harbor College, a maritime-focused public highschool on Governors Island, which is closely concerned within the venture.

Scholars develop and hatch child oysters which are then hooked up to the wiped clean shells. The shells and larvae are grouped in combination and strategically positioned someplace off New York’s beach.

Billion Oyster Undertaking has began twelve reefs up to now, some with reference to shore, and others out in deeper waters.

Enticing the neighborhood — specifically younger scholars — all the way through the method is a most sensible precedence. The gang works with greater than 75 public colleges throughout all 5 New York Town boroughs, and scholars take box journeys out to reef websites or analysis station to learn to measure water high quality and monitor oyster enlargement.

“Our paintings with colleges and communities will get other people all the way down to the water’s edge and begins to reestablish the connection that New Yorkers used to have with the ecosystem,” Malinowski mentioned.

Billion Oyster Undertaking is funded thru quite a lot of grants from state and town backers. The Nationwide Science Basis additionally just lately renewed reinforce for the venture, providing a two-year $4.five million grant.

The Large Oyster

Loads of years in the past, New York Harbor teemed with greater than 200,000 acres of are living oyster reefs. The molluscs wiped clean and filtered the water, naturally getting rid of pollution. Dolphins, seals and different creatures, attracted to the colourful ecosystem, swam simply off the shore of Big apple.

“When Europeans first arrived in New York Harbor, there have been oyster reefs all over and there have been such a lot of fish that they could not bodily get out of the way in which of the boats,” Malinowski mentioned. “In about 100 years, we had harvested all of the local oysters from the harbor. All the ones oysters had been eaten, fed on in the community by means of New Yorkers, and shipped in every single place the arena as meals.”

Oysters had been a favourite deal with amongst New York Town’s skyrocketing inhabitants within the 19th century. Side road distributors and eating places started to peddle the inexpensive, salty seafood.

By means of the 1900s, New York Harbor used to be polluted and almost dead. It wasn’t till 1972, with the passage of the Blank Water Act, that the regulation prohibited dumping waste or uncooked sewage into the harbor.

Best just lately has the water turn out to be blank sufficient to reinforce shellfish like mussels, oysters and clams.

Typhoon Surge

Water purity isn’t the one reason why New York’s waters suffered with out oysters. For hundreds of years, their wide reefs served as herbal breakwaters — underwater boundaries that assist give protection to land from hurricane surge and erosive waves — round New York’s beach.

The ones reefs had been lengthy long past by the point Typhoon Sandy ripped in the course of the state in 2012, and professionals have urged the loss of oyster reefs and different herbal boundaries exacerbated the wear and tear.

The Billion Oyster Undertaking’s paintings may just slowly rebuild the breakwaters. However,”the oyster reefs that secure New York Town sooner than they had been got rid of … took masses of years to develop to the scale that they had to be to offer protection to the shore,” Malinowski mentioned.

As a substitute of looking ahead to a full-grown oyster reef to start mitigating hurricane surge, The Billion Oyster venture is partnering with any other workforce, Dwelling Breakwaters, to create synthetic reefs throughout two miles of Staten Island coastline. Oysters can then construct reefs across the constructions, making it higher and sturdier.

The Dwelling Breakwaters initiative, which is because of start development this 12 months, is funded partly by means of a $60 million crisis restoration grant awarded by means of the federal Division of Housing and City Construction in 2013.

Kate Orff, who based Scape, the design company this is spearheading the venture, mentioned it’s previous time for New Yorkers to start out taking critical steps to struggle the affect of local weather exchange — which is predicted to deliver an increasing number of unstable climate and better sea ranges.

“We want to greatly take a look at panorama methods,” she mentioned.

What is forward for BOP

Billion Oyster Undertaking is not the primary initiative of its type.

The Oyster Restoration Partnership used to be introduced in 1994 to assist reestablish oyster populations off the coast of Virginia and Maryland.

A big chew of the oyster inhabitants there was restored. And the crowd encourages different localities to tackle identical measures.

Malinowski, the Billion Oyster Undertaking govt director, mentioned he hopes extra projects will pop up as other people start to notice the the most important function oysters play in preserving oceans wholesome.

However there is nonetheless a protracted technique to move sooner than the oyster inhabitants close to New York is any place close to pre-industrialization ranges.

The venture’s development is “thrilling and it is validating in a large method — however additionally it is sobering as a result of there is a lengthy technique to move,” he mentioned.

Malinowski mentioned he’s heartened by means of the participation of native grade schoolers. He mentioned he hopes the paintings will encourage more youthful generations to imagine environmental and ecological problems it doesn’t matter what they do.

“Other people in New York will turn out to be an increasing number of conscious that the explanation [New York Harbor is] polluted is as a result of it is infected with human waste, that is it is filled with trash and plastic,” he mentioned. “You’ll simply believe strolling to Central Park within the afternoon on a Saturday and having the gates closed as it used to be filled with human waste and trash.”

“New Yorkers would not stand for that and it could forestall.”

Quantcast<![CDATA[(function($)$(document).onZonesAndDomReady(function () if (Modernizr.android === true) $('head').append('’);$(‘head’).append(”););(jQuery));]]>



Supply hyperlink

This site uses Akismet to reduce spam. Learn how your comment data is processed.